JDK各个版本新特性介绍及使用

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 申明的List只存放Parent及其子类,而下边界 List 申明的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:表明注释类型是自动继承的。如果一个继承的元注释出现在注释类型上声明,用户在一个类上查询注释类型声明,类声明没有这种类型的注释,然后该类的超类将自动被查询注释类型。这个过程将会重复直到这个注释类型被找到,或者类层次结构的顶部(对象)是达到了。如果没有超类有这种类型的注释,那么查询将表明的类没有这样的注释。

注意的几个问题:

  1. 当注解的元素没有默认值的时候,在使用的时候必须为其指定初始值

  2. 如果注解元素有了初始值,那么在使用的时候可以为其赋新的值,否则将使用默认值

  3. 一个较为特殊的情况:注解元素当且仅当其只有一个元素且名称为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:基于时间的版本控制

收藏加关注,再来不迷路!!!

你可能感兴趣的:(java,编程语言,jdk)