JDK各个版本新特性介绍及使用
本文将介绍JDK1.0版本到JDK1.9版本的特性及JDK2.0主要部分特性。本文学术仅供参考
JDK1.0新特性 开发代号为Oak(橡树), 于1996-01-23发行.
1995年初发布了Java语言,1996年初发布JDK1.0版本。
此版本包括两个部分:运行环境(即Java Runtime Environment,JRE)和开发环境(Java Development Kit,IDK)。运行环境包括核心API,集成API、用户界面API、发布技术、Java虚拟机(Java Virtual Machine,JVM)五个部分;其中开发环境包括编译Java程序的编译器(javac 命令)。
JDK1.1新特性 开发代号为Coffce(咖啡),于1997-02-19发行.
1997年2月18发布了jdk1.1版本;增加了JIT(Just In Time,即时编译)编译器。相对于传统编译器,它会将经常用到的指令保存到内存中。当下次调用的时候不需要重新编译了,此方式让JDK在效率上有了较大优势。
此外还引入新特性
1: JDBC (Java Database Connectivity)
2: 内部类(inner Class)
3: Java Bean
4: RMI (Remote Method Invocation)
5: 内省反射 (introspect reflex)
JDK1.2新特性 开发代号为Playground(操场),于1998-12-08发行.
1998年12月发布,此版本是Java历史上最重要的JDK版本,伴随JDK1.2一同发布的还有JSP/SERVLET、EJB等规范,并将Java分成了J2EE、J2SE和J2ME三个版本。
J2ME:主要用于控制移动设备和信息家电等有限存储的设备。
J2SE:整个Java技术的核心和基础,它是J2ME和J2EE编程的基础。
J2EE:Java技术中最广泛的部分,它提供了企业应用开发相关的完整解决方案。
这标志着Java已经向企业、桌面、移动进军, 标志Java已经进入Java2时代。
此外还引入新特性
1:集合框架
2:字符串常量做内存映射;
3:JIT编译器 (Just In Time)
4:对打包Java文件数字签名
5:控制授权访问系统资源的策略工具
6:JFC(Java Foundation Classes) Swing 1.0, 拖放和Java2D类库
7:Java插件
8:JDBC可滚动结果集,BLOB,CLOB,批量更新和用户自定义类型
9:Applet中添加声音支持
JDK1.3新特性 开发代号为Kestrel(红隼),于2000-05-08发行.
引入的新特性包括:
1:Java Sound API;
2:jar文件索引;
3:对Java的各个方面都做了大量优化和增强
JDK1.4新特性 开发代号Merlin(隼),于2004-02-06(首次在JCP下发行).
2002年2月发布此版本,是JDK历史上最为成熟的版本。此时Compaq,Fujitsu、SAS、Symbian、IBM等公司的参与,使JDK1.4成为发展最快的一个JDK版本。JDK1.4已经可以使用Java实现 大多数的应用。
在此期间Java语言在企业应用领域大放异彩。涌现大量基于Java语言的开源框架:Struts、WebWork、Hibernate、Spring等;大量企业应用服务器也开始涌现:WebLogic、WebSphere、 JBoss等。
引入的新特性包括:
1:XML处理
2:Java打印服务
3:日志API(Logging)
4:Java Web Start
5:JDBC 3.0 API
6:断言机制
7:参数API (Preferences)
8:链式异常处理
9:支持IPV6
10:正则表达(Regular)
11:image I/O API
JDK1.5新特性 开发代号为Tiger(猛虎),于2004-09-30发行.
2004年10月发布了万众期待的JDK1.5,同时,Sun将JDK1.5改为Java5.0,J2EE、J2SE和J2ME也相应的改为Java SE、Java ME、Java EE。增加了泛型、增强for循环、可变数量的形参、注释 (Annotations)、自动拆箱和装箱等功能;发布新的企业级平台规范,如通过注释等新特性来简化EJB的复杂性,并推出EJB3.0规范,还推出了自己的MVC框架规范:JSF。
引入的新特性包括:
1:泛型(Generic)
泛型格式:
1.通配符问号(?)表示任意类型。如"List>"表示存放任意对象类型的List,与List等同。
2.通配符可以连接限制符:extends 和 super如:上边界List extends Parent> 申明的List只存放Parent及其子类,而下边界 List super Child> 申明的List只能存放Child及其父类。
3.通用类型,通常使用任意一个大写字母表示如:T(这里可以使用任意符合命名规则的字符都可以,它能代表任何类型。如果使用通用类型申明一个变量,那么必须在类申明后面加上,尖括号的符号必须是前面的通用类型变量,有多个可以使用逗号分割如:
泛型功能强大使用广泛,多态进行数据传输时,JDK5之前使用Object传输进行向下转型,在此可能在运行期强转失败抛ClassCastException异常,导致程序异常终止。引入泛型可以将运行期异常转编译异常,在编写代码时就可以检测出问题,使得类型转换更安全。
2:For-Each循环
增强for循环,新增一种循环语法,格式:for(Class n: Class){}
List list = new ArrayList();
list.add(“11111”);list.add(“22222”);list.add(“33333”);
//普通for循环定义下标index并初始化,判断是否小于集合长度并自增、循环体还需要赋值
for (int index = 0; index < list.size(); index++ ) {
String s = list.get(index); System.out.println("s: " + s);
}
//ForEach 增强for循环只需要如下即可完成上面的操作。
for (String s : list){
System.out.println("s:" + s);
} 基本可以替换掉所有用普通for循环的代码
3:自动装箱与拆箱
在JKD5以前我们的处理方式:
//int 转换为 Integer int i = 10;
Integer integer = new Integer(i);
//Integer 转换为 int Integer integer1 = new Integer(100);
int i1 = integer1.intValue();
自动拆装箱处理方式:
Integer integer = 10;//int 转换为 Integer
int i = integer;//Integer 转换为 int
将class反编译可以看出自动拆装箱的代码如下:
Integer integer = Integer.valueOf(10);int i = integer.intValue();
4:类安全枚举 (Enum)
关键字enum表示枚举类型,作用相当类声明中的class关键字
1.构造器只能是private修饰、没有构造器编译器同样会自动生成一个private修饰无参默认构造器。
2.所有的枚举值默认都是public static final 修饰的。
3.枚举值与值之间用逗号分割,最后一个用分号,枚举值后面没有任何东西该分号可以省略。
4.每一个枚举值就是一个枚举类型的实例。
5.枚举类型中可以定义带任意修饰符的非枚举值变量。
6.枚举值必须位于枚举类型的第一位置,即非枚举值必须位于枚举值之后。
7.枚举类型自带两个方法,values() 和 value(String name) 两个方法。
//定义枚举类型
public enum SexEnum {
RED,GREEN,YELLOW,PINK
}
5:可变参数(Varargs)
当传入到方法的参数不固定时,可以使用可变参数 格式method(Class … prams){}
public class VarArgs {
// 与以往main方式不一样
public static void main(String… args) {
varArgs(1);varArgs(2,3);//…
varArgs(7,8,9,10,11);
}//可变参数的格式: 数据类型... 参数名
public static void varArgs(int… ints) {
for (int i : ints){
System.out.println(i); }
} }
6:静态导入( import static)
可以将静态方法和静态变量通过 import static 和导包的方式直接导入,使用时无需类名直接访问。
import static java.lang.System.out;
import static java.lang.Math.*;
public class ImportStaticTest {
public static void main(String[] args) {
/* 使用静态导入 import static java.lang.System.out; out.println 可以直接使用调用 而不再需要类System对象去调用 同时也支持*通配符 */
out.println("max(3,5): " + max(3,5));
out.println("random(): " + random());
}}
7:元数据注解(Annotation)
元数据也叫注解,名字容易理解,格式:@注解名
JDK内置三种标准注解:
@Override:只能使用在方法上、表示当前的方法定义将覆盖超类中的方法。
@Deprecated: 注解可使用在构造器、字段、局部变量、方法、包、类接口以及枚举上、表示被弃用,不鼓励使用,编译器会发出警告信息。通常是因为它是危险的,或则因为有更好的选择。
@SuppressWarnings:注解可以使用在构造器、字段、局部变量、方法、类接口以及枚举上,必须指定value值,关闭不当的编译器警告信息。告诉编译器不提示某某警告信息。
java内置了4种元注解、可理解成java中用来注解Annotation的Annotation
@Retention:保留策略,表示注解有多长保留,先了解JAVA文件的三个时期:SOURCE 源文件期(.java文件) -> CLASS 编译器编译期(.class文件) -> RUNTIME jvm运行时期。
@Target: 表示注解使用的上下文,TYPE、FIELD、METHOD、PARAMETER、CONSTRUCTOR、LOCAL_VARIABLE、ANNOTATION_TYPE和PACKAGE。详细说明返回看注解的作用范围。
@Documented:表示将被javadoc文档记录。
@Inherited:表明注释类型是自动继承的。如果一个继承的元注释出现在注释类型上声明,用户在一个类上查询注释类型声明,类声明没有这种类型的注释,然后该类的超类将自动被查询注释类型。这个过程将会重复直到这个注释类型被找到,或者类层次结构的顶部(对象)是达到了。如果没有超类有这种类型的注释,那么查询将表明的类没有这样的注释。
注意的几个问题:
当注解的元素没有默认值的时候,在使用的时候必须为其指定初始值
如果注解元素有了初始值,那么在使用的时候可以为其赋新的值,否则将使用默认值
一个较为特殊的情况:注解元素当且仅当其只有一个元素且名称为value时,在使用该注解的时候为其赋值时可以不用写属性(元素)名称
注解的作用范围可通过java.lang.annotation.ElementType查看
8:内省(Introspect)
Java中JavaBean类属性、事件的一种缺省处理方法。JavaBean是特殊的类、主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法名符合某种命名规则在两个模块之间传递信息,可以将信息封装进JavaBean中,这种对象称为“值对象”(Value Object),或“VO”,信息储存在类的私有变量中通过set()、get()获得
public class Person{
private int id;
private String name;
public int getId() {
return age;}
public void setId(int age) {
this.age = age;}
public String getName() {
return name;}
public void setName(String name) {
this.name = name;
}
}
JDK1.6新特性 开发代号为Mustang(野马),于2006-12-11发行.
2006年12月发布。引入了一个支持脚本引擎的新框架、UI的增强、对WebService支持的增强(JAX-WS2.0和JAXB2.0)、一系列新的安全相关的增强、JDBC4.0、Compiler API、通用的 Annotations支持。
1:Web服务元数据
2:脚本语言支持
3:JTable的排序和过滤
4:更简单,更强大的JAX-WS
5:轻量级Http Server
6:嵌入式数据库 Derby
JDK1.7新特性 开发代号是Dolphin(海豚),于2011-07-28发行.
版本JDK7:2011年7月28日Oracle公司发布,引入了二进制整数、支持字符串的switch语句、菱形语法、多异常捕捉、自动关闭资源的try语句等新特性。
引入的新特性包括:
1:switch 语句支持 String
2:泛型对象类型推断
3:catch 多个类型异常
4:支持动态语言;
5:改进泛型类型可变参数
6:语法上支持集合而不一定是数组
7:新增取环境信息的工具方法
8:boolean类型反转:空指针安全,参与位运算
9:char间的equals
10:安全的加减乘除
11:map集合支持并发请求
12:引入Java NIO.2开发包;
13:字面值中使用下划线
14:null值得自动处理.
JDK1.8新特性开发代号是Dolphin(海豚),于2014-03-18发行.
版本JDK8:2014年3月18日,oracle公司发布了Java1.8,带来了全新的Lambda表达式,函数式接口、Lambda 表达式、集合的流式操作、注解的更新、安全性的增强、IO\NIO 的改进、完善的全球化功能等。
1:Lambda表达式
2:管道和流
3:新的日期和时间 API
4:默认的方法;
5:类型注解:
6:Nashorn javascript引擎;
7:并行累加器;
8:并行操作
9:内存错误移除
JDK1.9新特性开发代号是Elephant(巨象),于2014-09-8发行.
1:Jigsaw 项目;
2:模块化源码
3:简化进程API
4:轻量级 JSON API
5:时间和货币的API
6:改善锁争用机制
7:代码分段缓存
8:智能Java编译, 第二阶段
9:HTTP 2.0客户端
10:Java的REPL实现
JDK2.0新特性 开发代号是forest(森林),于2015-02-16发行.
1:局部变量类型推断
2:将JDK多存储库合并为单储存库
3:垃圾回收接口
4:并行Full GC 的G1
5:应用数据共享
6:线程局部管控
7:移除Native-Header Generation Tool (javah)
8:Unicode 标签扩展
9:备用内存设备上分配堆内存
10:基于实验JAVA 的JIT 编译器
11:Root 证书
12:基于时间的版本控制