Java:JDK版本特性汇总

 

一、JDK 1.0

发布版本

1.0

发布时间

1996.1.23

特性要点

  1. 正式版本运行环境的实现(JVM)。
  2. Applet。
  3. AWT。

特性说明

  1. Java初始版本,纯解释运行,使用外挂JIT,性能比较差,运行速度慢。
  2. 类和接口数量共211个。

 

二、JDK 1.1

发布版本

1.1

发布时间

1997.2.19

特性要点

  1. 增加内部类(Inner Class)。
  2. JDBC。
  3. RMI。
  4. 反射。

特性说明

  1. 内部类(Inner Class)

简单地说,内部类就是在一个类的内部定义另一个类。这可能是在高层次的类中或者甚至在一块代码内部。对所定义的类访问仅限于这个内部类的范围内。这使得定义一个只有在一个受限制范围内看到的类变得非常容易(而不是声明私有程序包)。除了这种功能以外,它还能够创建运行时类的特殊实例。例如具有特殊实现方法doStuff()的StuffDoer()类的新实例可以如下创建:

new StuffDoer(){public doStuff(){/*...*/}};

使用这样的技术,使得提供一种方法指针(Method Pointers)成为可能。这就是首次引入内部类的主要原因。本质上,程序员是用一种众所周知的相关方法创建一个特殊目的的对象。这个对象就作为“方法指针”的代用品(很聪明,但是一个引入混乱代码的机会)。

内部类的增加,导致了许多语法上的变更。由于添加和修改了很多类,所以类库也发生了巨大的变化(JDK1.1的类库是JDK1.0的两倍左右)。

  1. 新版本的Java虚拟机JVM。
  2. 基于Windows的AWT类库重新实现,提供更快速更平滑的窗口操作。
  3. 通过JDBC访问数据库。
  4. 通过RWI访问远程站点。
  5. 支持国际化(il8n) 为不同的语言产生了不同的文本输出。其它变化是提供时间和货币不同的显示的方式。
  6. 性能的提高

虚拟机的一部分已经用汇编语言重写,没有用的类进行GC,AWT在Windows上的实现已重写,avaArchives也已实现,APPLE的MAC机上的内存管理也更加完善。

8、新的应用程序接口

(1)企业事务服务程序(Transaction Services)用来支持在线的事务处理。

(2)媒体语音API(Speech API)用于支持语音识别和合成。

(3)Media Framework用来支持回放和捕捉。

9、提供异常处理工具,使得处理起那些重大的问题非常容易,而且不会引起严重后果。

10、重载方法(Overriding Methods)

重载(overriding)已经成了关键字,被加入了方法声明。这意味着一个方法重载了在基类中定义的方法,这将允许你确保只重载你需要的方法,如果你使用了关键字而方法不存在或错误的使用方法将会产生警告。

 

三、JDK 1.2

发布版本

1.2

发布时间

1998.12.14

特性要点

  1. 新的虚拟机Solaris Exact VM(生命周期很短暂,很快被Hotspot取代)。
  2. 结构分离。Java2被划分为J2SE、J2EE和J2ME。
  3. 新增库Swing、Collections。
  4. EJB。
  5. 增加JIT编译器。

特性说明

 

 

四、JDK 1.3

发布版本

1.3

发布时间

2000.5.8

特性要点

  1. 新的虚拟机Hotspot,作为Java默认虚拟机发布。
  2. 使用CORBA IIOP实现RMI通信协议。
  3. 增加JavaSound对声音的支持。

特性说明

对API的改动相对较少。

 

五、JDK 1.4

发布版本

1.4

发布时间

2002.1.4

特性要点

1、新增NIO。

2、安全扩展。

3、性能增强。

4、支持正则表达式。

特性说明

  1. XML处理

通过一套标准的Java 平台API提供对XML的基本处理的支持。

 

2、新的I/O接口

新的I/O (NIO)接口在缓冲处理,字符集支持,规则表达式匹配,文件I/O及可升级的网络I/O领域提供新特性及改良的性能。

 

3、安全

(1)密码系统扩展 (JCE),

(2)安全套接字扩展 (JSSE),

(3)鉴定及认证服务(JAAS)安全特性已经被集成到标准版中,而不是作为一个可选包。

(4)JavaTM GSS-API 能被使用Kerberos V5机制的通讯应用程序用于安全的交换信息。

(5)Java.security.cert包中的 JavaTM Certification Path API 包含新的类和方法,它们允许你建立并验证证书路径(即Certificate Chains(认证链)")。

由于进口控制限制, JSDK 1.4版引入的JCE权限政策文件允许使用“强有力”但是受限的密码系统。 这些文件的在加密强度上“不受限”的版本也可以得到。

同样由于进口控制限制,这个发布的 JSSE 实现提供强有力的密码套件,但是不允许缺省的SSLSocketFactory 和 SSLServerSocketFactory 被替代。

 

4、Java 2D技术

Java 2D 增加很多新特性: 性能提高, 缓冲图形的硬件加速支持,可插入式的图形I/O结构,新的打印服务API,以及几个新字体。

 

5、图形 I/O 结构

提供工作于存储于文件及通过网络访问的图形的可插入式的结构。提供比之前API在图形加载和保存上更大适应性和强有力的支持。

 

6、新增Java 打印服务API

使客户端和服务器端应用能发现和选择基于他们的能力的打印服务,能指定数据打印格式,能提交支持文档类型的打印作业。

 

7、AWT升级

改变集中在提高GUI程序的健壮性,行为及性能上。新的焦点结构代替了原来的实现并且解决了很多由于平台矛盾及AWT和Swing组件间的不相容引起的有关焦点问题的错误。新的全屏独占模式API 通过挂起窗口系统直接写屏提供高性能的图形,有益于像游戏或者其他绘图密集程序的应用。通过新的图形环境方法指出在图形环境下显示器,键盘和鼠标是否被支持的无知支持(Headless support)。对于需要对应用程序的外观进行全面控制的程序而言,自带的框架修饰的关闭也是可用的。激活这个功能可以防止绘制框架自带的标题栏,系统菜单,边框或其他依赖本地操作系统的图形组件。按钮中间带有滚动轮的滑轮鼠标的内建支持也可以使用。同样,新的鼠标滑轮监听器类允许用户自定义鼠标滑轮的行为。AWT包已经被修改为全64位适应,并且能运行在带有64位和32位地址的Solaris 机器上。

 

8、Swing新特性

(1)新的spinner组件是一个允许用户通过使用一对很小的上/下箭头按钮循环选择一个数字或值的单行输入域。

(2)新的格式化文本域组件允许格式化的日期,数字和字符串,就像只接受十进制价格的文本域。

(3)窗口外观(Windows look and feel) 实现已经提供2000/98版本的支持。

(4)新的拖放结构提供组件间的无缝拖放支持同时提供实现自己的Swing组件的拖放功能。

(5)Swing的进度条组件已经被加强以支持模糊状态;模糊进度条使用连续的动画显示一个耗时的操作在进行而不是显示完成程度。

(6)选项卡组件已经被加强以支持可滚动的选项卡。由于这个特性的加入,如果所有的选项不能显示在一行里面,选项卡组件将显示一个可滚动的选项条而不是将选项放入多行。

(7)私有方式打包的popu和popup factory类改为公有,因此程序员可以自定义或创建他们自己的弹出式组件。

(8)新的焦点结构完全集成进Swing。

 

9、故障记录API

Java 故障记录API 通过提供适合终端用户,系统管理员,领域服务工程师及软件开发小组分析的故障记录促进了软件在客户方的服务与维护。故障记录 API捕获诸如安全失效,配置错误,性能瓶颈,和/或应用或平台的错误。

 

10、新增Java Web Start 产品技术

使用Java Web Start,你启动应用程序可见简单的单击Web页的链接。如果应用程序不在你的计算机上面,Java Web Start 自动的下载所需要的全部文件。然后它缓存那些文件载你的计算机上,因此那些应用程序在任何你想让它启动的时候都可以从你的计算机上启动(无论是从桌面上的一个图标或者从浏览器上的一个链接)。无论使用什么方法启动应用程序,该应用程序总是呈现最新的版本。

 

11、长期持续的JavaBeans组件

新的持续模型被设计用来处理图形的JavaBean和固定的外形间的转化过程。新的API适合为图形的JavaBean创建就像文本所描述的他们的特性的档案。

 

12、JDBC 3.0 API

JDBC 3.0 API由java.sql 包和 javax.sql包组成,为Java语言提供通用的数据访问。使用JDBC 3.0 API,事实上可以访问任何数据源,从关系型数据库到电子数据表以及普通文件。JDBC技术也提供什么工具及可选择的接口可以被建立的通用基础。

新特性包括在事务中设置保存点的能力,保持一个被提交事务的结果集,重新使用前面的申明,得到申明中的参数的元数据,得到自动产生的关键字以及一次打开多个结果集。这里有两个新的JDBC数据类型,BOOLEAN和DATALINK,使用DATALINK数据类型可以在数据源外操纵数据。这个发布同时建立了JDBC服务供应者接口和连接器结构间的关系。

 

13、新增断言工具

断言是程序员相信计算机程序的状态为真的布尔表达式。例如,在排序一个列表后,程序员可以断言该列表式升序排列的。运行时的断言评估以确定代码的正确性是提高代码的质量的最强有力的工具之一,因为它快速的揭露的程序员在程序的行为上的误解。

 

14、新增参数选择API

用于操纵用户参数和配置数据的简单API。应用程序需要参数和配置数据以适应不同的用户、环境及需求。应用程序需要一种存储,得到以及修改这些数据的方法。这个需求由参数选择API来满足。参数选择API有意于取代通常使用的java.util.Properties类,纠正它的很多不足,同时保持它的小巧。

 

15、Java虚拟机增强

(1)对于64位SolarisTM-SPARCTM 平台的支持。

(2)错误处理机制。

(3)并发垃圾集合器。

(4)记录垃圾集合事件的新工具。

(5)Classic虚拟机不再作为JDK的一部分。

 

16、新的网络支持

(1)提供基于TCP和UDP应用的IPv6支持。

(2)无连接/无绑定套接字支持,更灵活的套接字创建、绑定及连接。

(3)安全套接字扩展的机制提供通过套接字的加密数据发送。

(4)新类URI允许不存在协议处理程序的情况下进行URI构造和解析。

(5)FTP协议处理程序被添加为当前标准程序。

(6)缺省的字符集现在是UTF8,并且能使用其他字符集方案的API已经被加入。

 

17、串行化调整

(1)支持已知的非串行化对象不被串行数据流访问。

(2)支持类方法readObjectNoData。

(3)重要的错误修正。

 

18、JNDI

(1)新增DNS服务程序。这个组件允许应用程序读取存储于DNS上的数据。

(2)JNDI在安全上有所增强,这使得应用程序可以建立基于已经存在的LDAP连接上的安全会议并且可以使用不同的认证协议。

(3)JNDI CORBA对象服务(COS)命名服务程序支持Interoperable Naming Service (INS) 规范 (99-12-03)。

 

19、国际化

(1)增加Unicode 3.0 支持,字符处理是基于Unicode 3.0标准。这影响java.lang包中的Characte类和String类,同时影响java.text包中的文本整理及双向文本分析功能。

(2)增加Thai和Hindi支持。

 

20、集合结构增强

(1)随机访问的标记接口。

(2)基于身份的(而不是基于相等性)Map。

(3)insertion-order-preserving Map。

(4)Set 实现。

(5)以及用于从列表中操纵和返回值的新算法。

 

21、正则表达式

新包java.util.regex 包含依靠指定模式的正则表达式的字符序列匹配的类。

 

22、Math

类java.math.BigInteger新增加用于产生素数的高效的方法,该方法不需要调用者指定什么。

 

23、反射

为了更高的性能反射部分操作被重写。

 

六、JDK 1.5

发布版本

1.5

发布时间

2004.9.30

特性要点

JDK1.5的一个重要主题就是通过新增一些特性来简化开发

1、泛型(Generic)。

2、增强型for-each循环。

3、自动装包/拆包。

4、枚举。

5、可变参数。

6、静态导入。

7、线程加强。

8、新增ConcurrentHashMap。

特性说明

1、泛型(Generic)

C++通过模板技术可以指定集合的元素类型,而Java在1.5之前一直没有相对应的功能。一个集合可以放任何类型的对象,相应地从集合里面拿对象的时候我们也不得不对他们进行强制得类型转换。引入泛型,它允许指定集合里元素的类型,这样强类型在编译时刻会进行类型检查。

 

2、For-Each循环

For-Each循环简化了集合的遍历。

 

3、自动装包/拆包

自动装包:基本类型自动转为包装类.(int >> Integer)

自动拆包:包装类自动转为基本类型.(Integer >> int)

 

4、枚举(Enums)

增加全新的枚举类型,引入了新关键字enmu。我们可以这样来定义一个枚举类型。

 

5、可变参数

新提供可变参数支持,可以声明一个接受可变数目参数的方法。注意,可变参数必须是函数声明中的最后一个参数。

 

6、静态导入

要使用用静态成员(方法和变量)我们必须给出提供这个方法的类。使用静态导入可以使被导入类的所有静态变量和静态方法在当前类直接可见,使用这些静态成员无需再给出他们的类名。

 

7、内省(Introspector)

内省是Java语言对Bean类属性、事件的一种缺省处理方法。一般情况对于一个Bean类是通过getter、setter方法来操作其属性。内省则是提供了一套API用来访问某个属性的getter /setter方法。

 

8、线程池

JDK1.5中对Java线程的类库做了大量的扩展,其中线程池就是Java5的新特征之一,除了线程池之外,还有很多多线程相关的内容,为多线程的编程带来了极大便利。为了编写高效稳定可靠的多线程程序,线程部分的新增内容显得尤为重要。

有关JDK1.5线程新特征的内容全部在java.util.concurrent下面,里面包含数目众多的接口和类。

线程池的基本思想还是一种对象池的思想,开辟一块内存空间,里面存放了众多(未死亡)的线程,池中线程执行调度由池管理器来处理。当有线程任务时,从池中取一个,执行完成后线程对象归池,这样可以避免反复创建线程对象所带来的性能开销,节省了系统的资源。

在之前,要实现一个线程池是相当有难度的,JDK1.5中使用线程池API就可以享受线程池带来的极大便利,主要有固定尺寸的线程池、可变尺寸连接池等。线程池API需要了解的是java.util.concurrent.Executors类的API,这个类提供大量创建连接池的静态方法,是必须掌握的。

 

9、JUC

ConcurrentHashMap(简称CHM)是在Java 1.5作为Hashtable的替代选择新引入,是concurrent包的重要成员。

 

七、JDK 1.6

发布版本

1.6

发布时间

2006.12.11

特性要点

1、AWT增强。

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

3、StAX。

4、Compiler API。

5、轻量级Http Server API。

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

7、用Console开发控制台程序。

8、对脚本语言的支持。

9、Common Annotations。

特性说明

1、AWT

在JDK1.6中,AWT新增加了两个类:Desktop和SystemTray。

前者可以用来打开系统默认浏览器浏览指定的URL,打开系统默认邮件客户端给指定的邮箱发邮件,用默认应用程序打开或编辑文件(比如用记事本打开以txt为后缀名的文件),用系统默认的打印机打印文档;后者可以用来在系统托盘区创建一个托盘程序。

 

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

JAXB是Java Architecture for XML Binding的缩写,可以将一个Java对象转变成为XML格式,反之亦然。

JAXB原来是Java EE的一部分,在JDK1.6中,SUN将其放到了Java SE中。JDK1.6中自带的这个JAXB版本是2.0,比起1.0(JSR 31)来说,JAXB2.0(JSR 222)使用JDK1.5的新特性Annotation来标识要作绑定的类和属性等。这就极大简化了开发的工作量。实际上,在Java EE 5.0中,EJB和Web Services也通过Annotation来简化开发工作。另外,JAXB2在底层是用StAX(JSR 173)来处理XML文档。除了JAXB之外,还可以通过XMLBeans和Castor等来实现同样的功能。

 

3、StAX

StAX(JSR 173)是JDK1.6.0中除了DOM和SAX之外的又一种处理XML文档的API。

 

4、Compiler API

新增Compiler API(JSR 199)可以动态编译Java源文件,结合反射功能就可以实现动态的产生Java代码并编译执行这些代码,有点动态语言的特征。

这个特性对于某些需要用到动态编译的应用程序相当有用。比如JSP Web Server,当我们手动修改JSP后,是不希望需要重启Web Server才可以看到效果的,这时候我们就可以用Compiler API来实现动态编译JSP文件。当然,现在的JSP Web Server也是支持JSP热部署的,现在的JSP Web Server通过在运行期间通过Runtime.exec或ProcessBuilder来调用javac来编译代码。这种方式需要我们产生另一个进程去做编译工作,不够优雅,容易使代码依赖与特定的操作系统。而Compiler API则通过一套易用的标准的API提供了更加丰富的方式去做动态编译,是跨平台的。

 

5、轻量级Http Server API

JDK1.6 提供了一个简单的Http Server API,使用户可以构建自己的嵌入式Http Server。支持Http和Https协议,提供了HTTP1.1的部分实现,没有被实现的那部分可以通过扩展已有的Http Server API来实现。程序员可以自己实现HttpHandler接口,HttpServer会调用HttpHandler实现类的回调方法来处理客户端请求。把一个Http请求和它的响应称为一个交换,包装成HttpExchange类,HttpServer负责将HttpExchange传给 HttpHandler实现类的回调方法。

 

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

插入式注解处理API(JSR 269)提供一套标准API来处理Annotations(JSR 175)。

实际上JSR 269不仅仅用来处理Annotation,更强大的功能是它建立了Java 语言本身的一个模型,把Java语言的语义映射成为对象。可以在javax.lang.model包下面看到这些类。可以利用JSR 269提供的API来构建一个功能丰富的元编程(MetaProgramming)环境。

JSR 269用Annotation Processor在编译期间而不是运行期间处理Annotation,Annotation Processor相当于编译器的一个插件,所以称为插入式注解处理。如果Annotation Processor处理Annotation时(执行process方法)产生了新的Java代码,编译器会再调用一次Annotation Processor,如果第二次处理还有新代码产生,就会接着调用Annotation Processor,直到没有新代码产生为止。每执行一次process()方法被称为一个"round",这样整个Annotation processing过程可以看作是一个round的序列。

JSR 269主要被设计成为针对Tools或者容器的API。

 

7、用Console开发控制台程序

JDK1.6中提供了java.io.Console 类专用来访问基于字符的控制台设备,程序如果要与Windows下的cmd或者Linux下的Terminal交互,就可以用Console类代劳。但不总是能得到可用的Console,一个JVM是否有可用的Console依赖于底层平台和JVM如何被调用。如果JVM是在交互式命令行(比如 Windows的cmd)中启动的,并且输入输出没有重定向到另外的地方,那么就可以得到一个可用的Console实例。

 

8、对脚本语言的支持

(1)ruby。

(2)Groovy。

(3)Javascript。

 

9、Common Annotations

Common annotations原本是Java EE 5.0(JSR 244)规范的一部分,SUN把它的一部分放到了Java SE 6.0中。

随着Annotation元数据功能(JSR 175)加入到Java SE 5.0里面,很多Java 技术(比如EJB、Web Services)都会用Annotation部分代替XML文件来配置运行参数(或者说是支持声明式编程,如EJB的声明式事务)。如果这些技术为通用目的都单独定义了自己的Annotations,显然有点重复建设,为其他相关的Java技术定义一套公共的Annotation是有价值的,可以避免重复建设的同时,也保证Java SE和Java EE 各种技术的一致性。

 

 

 

八、JDK 1.7

发布版本

1.7

发布时间

2009.2.19

特性要点

1、对集合类的语言支持。

2、自动资源管理。

3、改进的通用实例创建类型推断。

4、数字字面量下划线支持。

5、switch中使用string。

6、二进制字面量。

7、简化可变参数方法调用。

特性说明

1、对集合类的语言支持

Java将包含对创建集合类的第一类语言支持。这意味着集合类的创建可以像Ruby和Perl那样了。

原来:

         List<String> list = new ArrayList<String>();

         list.add("item");

         String item = list.get(0);

 

         Set<String> set = new HashSet<String>();

         set.add("item");

 

         Map<String, Integer> map = new HashMap<String, Integer>();

         map.put("key", 1);

         int value = map.get("key");

 

现在:

         List<String> list = ["item"];

         String item = list[0];

        

         Set<String> set = {"item"};

        

         Map<String, Integer> map = {"key" : 1};

         int value = map["key"];

这些集合是不可变的。

 

2、自动资源管理

Java中某些资源是需要手动关闭的,如InputStream,Writes,Sockets,Sql classes等。新的语言特性允许try语句本身申请更多的资源,这些资源作用于try代码块,并自动关闭。

   原来:

         BufferedReader br = new BufferedReader(new FileReader(path));

         try {

         return br.readLine();

               } finally {

                   br.close();

         }

 

现在:

          try (BufferedReader br = new BufferedReader(new FileReader(path)) {

             return br.readLine();

          }

 

3、增强的对通用实例创建(diamond)的类型推断

   类型推断是一个特殊的烦恼,下面的代码:

         Map<String, List<String>> anagrams = new HashMap<String, List<String>>();

 

   通过类型推断后变成:

         Map<String, List<String>> anagrams = new HashMap<>();

这个<>被叫做diamond(钻石)运算符,这个运算符从引用的声明中推断类型。

 

4、数字字面量下划线支持

很长的数字可读性不好,在Java 7中可以使用下划线分隔长int以及long了,如:

         int one_million = 1_000_000;

   运算时先去除下划线,如:1_1 * 10 = 110,120 – 1_0 = 110 。

  

5、Switch中使用string

以前在switch中只能使用number或enum。Java 7可以使用String。

 

6、二进制字面量

由于继承C语言,Java代码在传统上迫使程序员只能使用十进制,八进制或十六进制来表示数(numbers)。

   Java 7可以使用0b前缀创建二进制字面量:

         int binary = 0b1001_1001;

 

7、简化的可变参数调用

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

   JDK 7将警告从call转移到了方法声明(methord declaration)的过程中。这样API设计者就可以使用vararg,因为警告的数量大大减少了。

 

九、JDK 1.8

发布版本

1.8

发布时间

2014.3.18

特性要点

1、Lambda表达式,允许把函数作为一个方法的参数。

2、方法引用,提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器,与lambda联合使用,可以使语言的构造更紧凑简洁,减少冗余代码。

3、默认方法,就是一个在接口里面有了一个实现的方法。

4、新的编译工具,如:Nashorn引擎 jjs、 类依赖分析器jdeps。

5、Stream API(java.util.stream),把真正的函数式编程风格引入到Java中。

6、Date Time API,加强对日期与时间的处理。

7、Optional 类,成为 Java 8 类库的一部分,用来解决空指针异常。

8、Nashorn JavaScript 引擎,Java 8提供了一个新的Nashorn javascript引擎,它允许我们在JVM上运行特定的JavaScript应用。

特性说明

1、Lambda表达式

Lambda表达式可以说是Java 8最大的新特性,将函数式编程引入了Java。Lambda允许把函数作为一个方法的参数,或者把代码看成数据。一个Lambda表达式可以由用逗号分隔的参数列表、“–>”符号与函数体三部分表示。

例如:Arrays.asList( "p", "k", "u","f", "o", "r","k").forEach( e -> System.out.println( e ) );

为了使现有函数更好的支持Lambda表达式,Java 8引入了函数式接口的概念。函数式接口就是只有一个方法的普通接口。java.lang.Runnable与java.util.concurrent.Callable是函数式接口最典型的例子。为此,Java 8增加了一种特殊的注解@FunctionalInterface:

@FunctionalInterface

public interface Functional {

      void method();

}

 

2、接口的默认方法与静态方法

可以在接口中定义默认方法,使用default关键字,并提供默认的实现。所有实现这个接口的类都会接受默认方法的实现,除非子类提供的自己的实现。例如:

public interface DefaultFunctionInterface {

      default String defaultFunction() {

         return "default function";

      }

}

当然,还可以在接口中定义静态方法,使用static关键字,也可以提供实现。例如:

public interface StaticFunctionInterface {

static String staticFunction() {

         return "static function";

      }

}

接口的默认方法和静态方法的引入,其实可以认为引入了C++中抽象类的理念,以后再也不用在每个实现类中都写重复的代码了。

 

3、方法引用

通常与Lambda表达式联合使用,可以直接引用已有Java类或对象的方法。一般有四种不同的方法引用:

(1)构造器引用。语法是Class::new,或者更一般的Class< T >::new,要求构造器方法是没有参数。

(2)静态方法引用。语法是Class::static_method,要求接受一个Class类型的参数。

(3)特定类的任意对象方法引用。它的语法是Class::method,要求方法是没有参数的。

(4)特定对象的方法引用。它的语法是instance::method,要求方法接受一个参数,与3不同的地方在于,3是在列表元素上分别调用方法,而4是在某个对象上调用方法,将列表元素作为参数传入。

 

4、重复注解

在Java 5中使用注解有一个限制,即相同的注解在同一位置只能声明一次。Java 8引入重复注解,这样相同的注解在同一地方也可以声明多次。重复注解机制本身需要用@Repeatable注解。Java 8在编译器层做了优化,相同注解会以集合的方式保存,因此底层的原理并没有变化。

 

5、扩展注解的支持

Java 8扩展了注解的上下文,几乎可以为任何东西添加注解,包括局部变量、泛型类、父类与接口的实现,连方法的异常也能添加注解。

 

6、Optional

   Java 8引入Optional类来防止空指针异常,Optional类最先是由Google的Guava项目引入的。Optional类实际上是个容器,它可以保存类型T的值,或者保存null。使用Optional类我们就不用显式进行空指针检查了。

 

7、Stream

Stream API是把真正的函数式编程风格引入到Java中。其实简单来说可以把Stream理解为MapReduce,当然Google的MapReduce的灵感也是来自函数式编程。她其实是一连串支持连续、并行聚集操作的元素。从语法上看,也很像Linux的管道、或者链式编程,代码写起来简洁明了,非常酷帅!

 

8、Date/Time API (JSR 310)

Java 8新的Date-Time API (JSR 310)受Joda-Time的影响,提供了新的java.time包,可以用来替代 java.util.Date和java.util.Calendar。一般会用到Clock、LocaleDate、LocalTime、LocaleDateTime、ZonedDateTime、Duration这些类,对于时间日期的改进还是非常不错的。

 

9、JavaScript引擎Nashorn

Nashorn允许在JVM上开发运行JavaScript应用,允许Java与JavaScript相互调用。

 

10、Base64

在Java 8中,Base64编码成为了Java类库的标准。Base64类同时还提供了对URL、MIME友好的编码器与解码器。

 

11、更好的类型推测机制

Java 8在类型推测方面有了很大的提高,这就使代码更整洁,不需要太多的强制类型转换了。

 

12、编译器优化

Java 8将方法的参数名加入了字节码中,这样在运行时通过反射就能获取到参数名,只需要在编译时使用-parameters参数。

 

13、并行数组

支持对数组进行并行处理,主要是parallelSort()方法,它可以在多核机器上极大提高数组排序的速度。

 

14、并发

在新增Stream机制与Lambda的基础之上,加入了一些新方法来支持聚集操作。

 

15、JVM

PermGen空间被移除,取代它的是Metaspace(JEP 122)。

 

16、JUC

增加新的并发API。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值