zoukankan      html  css  js  c++  java
  • JDK各版本新特性总结

    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环境默认的通用的智能编译工具。
    期待但未确定的特性
     
  • 相关阅读:
    二分+RMQ/双端队列/尺取法 HDOJ 5289 Assignment
    思维题 HDOJ 5288 OO’s Sequence
    树形DP Codeforces Round #135 (Div. 2) D. Choosing Capital for Treeland
    最大流增广路(KM算法) HDOJ 1853 Cyclic Tour
    最大流增广路(KM算法) HDOJ 1533 Going Home
    最大流增广路(KM算法) HDOJ 2255 奔小康赚大钱
    Complete the Word CodeForces
    Gadgets for dollars and pounds CodeForces
    Vasya and Basketball CodeForces
    Carries SCU
  • 原文地址:https://www.cnblogs.com/12yang-ting/p/7496242.html
Copyright © 2011-2022 走看看