JDk以及各个版本的区别

JDK的含义:java development kit是程序员编写java程序需要的软件,JDK是整个java的核心,包括了java运行环境、java工具和java基础的类库。

JDK包含的基本组件包括:

.javac—编译器,将源程序转成字节码

.jar—打包工具,将相关的类文件打包成一个文件

.javadoc—文档生成器,从源码注释中提取文档

.jdb—debugger,查错工具

.java—运行编译后的java程序

appletviewer:小程序浏览器,一种执行HTML文件上的java小程序的java浏览器。

javah:产生可以调用java过程的C过程,或建立能被java程序调用的C过程的头文件。

javap:java反汇编器,显示编译类文件中的可访问功能和数据,同时显示字节代码含义。

jconsole:java进行系统调试和监控的工具。

 

 

java.lang:这个是系统的基础类,比如String等都是这里面的,这个package是唯一一个可以不用import就可以使用的package;

java.io:这里面有所有输入输出有关的类,比如文件操作等;

java.net:这是与网络有关的类,比如URL,URLConnection等;

java.util:这个是系统辅助类,特别是集合类Collection,List,Map等;

java.sql:这个是数据库操作的类,Connection,Statement,ResultSet等;

javax.servlet这个是JSP,Servlet等使用到的类;

 

JDK各个版本的新特性:

jdk1.5的新特性(代号:猛虎): 
1.静态导入(import static)

import语句可以导入一个类或是某个包中的所有类。

import static 语句可以导入一个类中的某个静态方法或是所有静态方法。

例如:

Math类提供了很多于数学运算的静态方法,通常情况下我们是以Math.abs();这样的方式来进行调用函数的。但是我们可不可以只写出adb();

在JDK1.5之后,可以使用import static 语句导入一个类中的某个静态方法或是所有静态方法。这是JDK1.5的新特性之一。

例如:

import static java.lang.Math.abs;就可以直接写一个abs();函数。

import static java.lang.Math.*; 就可以直接调用Math类中的所有静态方法。

 

2.泛型(Generic)

在JDK1.5之前,在Java集合容器中(如:List)可以讲任何类型的对象加入到其中,此时被加入的对象被视为Object来看待。当从集合容器取出对象时,需要程序员自行保证对象类型的强制转换。如下:

这段代码中很显然List对象中的类型不匹配,但在JDK1.5之前会编译通过,运行时才会报错,这样在开发过程中很不好。所以JDK1.5引入了泛型(Generic)的概念。在看下面的代码:

   泛型的引入在很大程度上避免了程序员自行保证集合容器中存取数据的强制转换。

 

3.For-Each循环(增强型for循环)

JDK1.5中,For-Each循环的加入简化了集合的遍历。假设我们要遍历一个集合对其中的元素进行一些处理。典型的代码为:



4.自动装包/拆包(Autoboxing/unboxing)

自动装包/拆包大大方便了基本类型数据和它们包装类地使用。
  自动装包:基本类型自动转为包装类.(int >> Integer)
  自动拆包:包装类自动转为基本类型.(Integer >> int)

5.枚举(Enums)

JDK1.5加入了一个全新类型的“类”-枚举类型。为此JDK1.5引入了一个新关键字enmu. 我们可以这样来定义一个枚举类型。如下:

之后,可以这样使用:

Gender gender = Gender.male;

也可以对枚举进行遍历,枚举类型提供了两个静态方法values()和valueOf():

 

6.可变参数(Varargs)

可变参数使程序员可以声明一个接受可变数目参数的方法(类似于多个方法重载,只不过是可变参数提供一个方法实现多个方法的重载,变得只是方法其中的参数)。

注意:可变参数必须是函数声明中的最后一个参数。

比如:我们编写一个简单的打印方法,以传统的方式实现方法重载:

 

下面使用可变参数来实现这些方法的重载:

       

 

调用方法:

Write("abc",123,new ArrayList());  // 当然其中的参数可以是任意类型,任意多个

 // 这就很方便的实现了方法重载 

输出:

java.lang.String
     java.lang.Integer
     java.util.ArrayList

JDK1.6新特性:(代号“野马”)

1.DestTop类和SystemTray类

前者用于调度操作系统中的一些功能,例如:

· 可以打开系统默认浏览器指定的URL地址;

· 打开系统默认邮件客户端给指定的邮箱发信息;

· 用默认程序打开或编辑文件;

· 用系统默认的打印机打印文档。

后者可用来在系统托盘区创建一个托盘程序。

 

2.使用JAXB2来实现对象与XML之间的映射

JAXB是Java Architecture for XML Binding的简写。JAXB是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序中能方便地结合XML数据和处理函数。
原来JAXB是Java EE的一部分,在JDK6中,SUN将其放到了Java SE中。

 

3.StAX

StAX是JDK1.6中除了DOM和SAX之外的有一种处理XML文档的API。

StAX是The Streaming API for XML的缩写。由于JDK6.0中的JAXB2和JAX-WS 2.0都会用到StAX,所以Sun决定把StAX加入到JAXP家族当中来,并将JAXP的版本升级到1.4. 

JDK6里面JAXP的版本就是1.4。JAXP是Java API for XML Processing的英文字头缩写,中文含义是:用于XML文档处理的使用Java语言编写的编程接口。

 

4.使用Complier API

现在我们可以用JDK1.6 的Compiler API动态编译Java源文件,Compiler API结合反射功能就可以实现动态的产生Java代码并编译执行这些代码,有点动态语言的特征。

这个特性对于某些需要用到动态编译的应用程序相当有用, 比如JSP Web Server,当我们手动修改JSP后,是不希望需要重启Web Server才可以看到效果的,这时候我们就可以用Compiler API来实现动态编译JSP文件。

 

5.轻量级的Http Server API

JDK6 提供了一个简单的Http Server API,据此我们可以构建自己的嵌入式Http Server,它支持Http和Https协议,提供了HTTP1.1的部分实现,没有被实现的那部分可以通过扩展已有的Http Server API来实现。

 

6.插入式注解处理API(Pluggable Annotation Processing API)

JSR (JSR是Java Specification Requests的缩写,意思是Java 规范请求)用Annotation Processor在编译期间而不是运行期间处理Annotation, Annotation Processor相当于编译器的一个插件,所以称为插入式注解处理。

 

7.用Console开发控制台程序

JDK6中提供了java.io.Console 类专用来访问基于字符的控制台设备. 你的程序如果要与Windows下的cmd或者Linux下的Terminal交互,就可以用Console类代劳。

 

8.对脚本语言的支持

如: ruby, groovy, javascript

 

9.Common Annotations

Common annotations原本是Java EE 5.0规范的一部分,现在SUN把它的一部分放到了Java SE 6.0中.随着Annotation元数据功能加入到Java SE 5.0里面,很多Java 技术(比如EJB,Web Services)都会用Annotation部分代替XML文件来配置运行参数,保证Java SE和Java EE 各种技术的一致性.。

JDK1.7新特性:

1.对Java集合(Collections)的增强支持

在JDK1.7之前的版本中,Java集合容器中存取元素的形式如下:

以List、Set、Map集合容器为例:

    

 

在JDK1.7中,摒弃了Java集合接口的实现类,如:ArrayList、HashSet和HashMap。而是直接采用[]、{}的形式存入对象,采用[]的形式按照索引、键值来获取集合中的对象,如下:

 

2.在Switch中可用String

在之前的版本中是不支持在Switch语句块中用String类型的数据的,这个功能在C#语言中早已被支持,好在JDK1.7中加入了。

 

3.数值可加下划线

例如:int one_million = 1_000_000;

 

4.支持二进制文字

例如:int binary = 0b1001_1001;

 

5.简化了可变参数方法的调用

当程序员试图使用一个不可具体化的可变参数并调用一个*varargs* (可变)方法时,编辑器会生成一个“非安全操作”的警告。

 

6.自动资源管理

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章