JDK各版本新特性总结
JDK 1.7 新特性
1.switch中可以使用string字符串了
2.<>的运用,
List<String> tempList = new ArrayList<>();
即泛型实例化类型自动推断
3.语法上支持集合,而不一定是数组
final List<Integer> piDigits = [ 1,2,3,4,5,8 ];
对Java集合(Collections)的增强支持,摒弃了Java集合接口的实现类,如:ArrayList、HashSet和HashMap。而是直接采用[]、{}的形式存入对象,采用[]的形式按照索引、键值来获取集合中的对象
4.新增一些取环境信息的工具方法
File System.getJavaIoTempDir() // IO临时文件夹 File System.getJavaHomeDir() // JRE的安装目录 File System.getUserHomeDir() // 当前用户目录 File System.getUserDir() // 启动java进程时所在的目录
5.Boolean类型反转,空指针安全,参与位运算
6.数值可加下划线,支持将整数类型用二进制来表示,用0b开头
int one_million = 1_000_000; int binary = 0b1001_1001;
7.简化了可变参数方法的调用
当程序员试图使用一个不可具体化的可变参数并调用一个*varargs* (可变)方法时,编辑器会生成一个“非安全操作”的警告。
8、在try catch异常扑捉中,一个catch可以写多个异常类型,用"|"隔开,
JDK 1.8 新特性
ava8是一个新的里程碑,带来了前所未有的诸多特性,lambda表达式,Stream API,新的Date time api,多核并发支持,重大安全问题改进等
一、接口的默认方法
Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可,这个特征又叫做扩展方法。
二、Lambda 表达式
在Java 8 中你就没必要使用这种传统的匿名对象的方式了,Java 8提供了更简洁的语法,lambda表达式:
Collections.sort(names, (String a, String b) -> { return b.compareTo(a); });
三、函数式接口
Lambda表达式是如何在java的类型系统中表示的呢?每一个lambda表达式都对应一个类型,通常是接口类型。而“函数式接口”是指仅仅只包含一个抽象方法的接口,每一个该类型的lambda表达式都会被匹配到这个抽象方法。因为 默认方法 不算抽象方法,所以你也可以给你的函数式接口添加默认方法。
四、方法与构造函数引用
Java 8 允许你使用 :: 关键字来传递方法或者构造函数引用,上面的代码展示了如何引用一个静态方法,我们也可以引用一个对象的方法:
converter = something::startsWith; String converted = converter.convert("Java"); System.out.println(converted);
五、Lambda 作用域
在lambda表达式中访问外层作用域和老版本的匿名对象中的方式很相似。你可以直接访问标记了final的外层局部变量,或者实例的字段以及静态变量。
六、访问局部变量
可以直接在lambda表达式中访问外层的局部变量:
七、访问对象字段与静态变量
和本地变量不同的是,lambda内部对于实例的字段以及静态变量是即可读又可写。该行为和匿名对象是一致的:
八、访问接口的默认方法
JDK 1.8 API包含了很多内建的函数式接口,在老Java中常用到的比如Comparator或者Runnable接口,这些接口都增加了@FunctionalInterface注解以便能用在lambda上。
Java 8 API同样还提供了很多全新的函数式接口来让工作更加方便,有一些接口是来自Google Guava库里的,即便你对这些很熟悉了,还是有必要看看这些是如何扩展到lambda上使用的。
JDK 1.9新特性
1. Jigsaw 项目;模块化源码
2. 简化进程API
3. 轻量级 JSON API
4. 钱和货币的API
5. 改善锁争用机制
6. 代码分段缓存
7. 智能Java编译, 第二阶段
8. HTTP 2.0客户端
9. Kulla计划: Java的REPL实现
1、 Jigsaw 项目:模块化JDK源码
Jigsaw项目即JEP201是为了模块化Java代码,并将JRE分
成相互协作的组件。这个JEP是迈向Jigsaw四步中的第一步,它只是模块化JDK源代码,不会改变JRE和JDK的真实结构,从而使得编译系统能够模
块编译并在构建时检查模块边界。这个项目原计划随Java
8发布,但因为推迟,所以被放到了Java
9中。Jigsaw项目一旦完成,将允许开发者根据项目的需要自定义组件,从而减少rt.jar的大小;还可以做到使Java能够更加容易的应用到小型计
算设备(如网络设备)中,同时也能够使得开发者更加容易地构建和维护这些类库。更多相关信息参见JEP201。
2、简化了的进程API
目前,Java控制与管理系统进程的能力是有限的,为了获得操作系统的一些信息需要调用本地程序或者其他变通方案。然而,在Java 9中将会新增一些新的、直接明了的方法来处理进程ID、名字和状态以及枚举多个JVM和进程等,从而扩展Java与操作系统的交互能力。
3、 轻量级的JSON API
尽管目前有多种处理JSON的Java工具(如Google的Gson、阿里巴巴的FastJson、IBM的Json4J等),但JSON API是Java语言的一部分,轻量并且运用了Java 8的新特性。JSONAPI将放在java.util包里一起发布,这样,开发者就可以直接使用JDK而无需再引入第三方JSON工具包了。
4、 钱和货币的相关API
Java 9引入了新的货币API, 用来表示货币, 并支持币种之间的转换和各种复杂运算。
5、 改善锁争用机制
锁争用限制了许多Java多线程应用性能,新的锁争用机制改善了Java对象监视器的性能,并得到了多种基准测试的验证(如Volano),这类测试可以估算JVM的极限吞吐量。实际中, 新的锁争用机制在22种不同的基准测试中都得到了出色的成绩。如果新的机制能在Java 9中得到应用的话, 应用程序的性能将会大大提升。
6、代码分段缓存
Java 9的另一个性能提升来自于JIT(Just-in-time)编译器。当某段代码被大量重复执行的时候,虚拟机会把这段代码编译成机器码(native code)并储存在代码缓存里面,继而通过访问缓存中不同分段的代码来提升编译器的效率。代码分段缓存机制将会提升许多方面的性能,如当JVM进行垃圾回收扫描的时候,就可以直接跳过永驻
代码,从而提升效率。
7、智能Java编译工具
智能Java编译工具(sjavac)的第一阶段始于JEP139这个项目, 用于在多核处理器情况下提升JDK的编译速度。如今,这个项目已经进入第二阶段即JEP199, 其目的是改进Java编译工具,并取代目前JDK编译工具javac,继而成为Java环境默认的通用的智能编译工具。
期待但未确定的特性