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环境默认的通用的智能编译工具。
    期待但未确定的特性
     
  • 相关阅读:
    查看DNS、IP、Mac等
    windows测试物理网络
    ACCEPT详解
    oracle动静视图-权限-角色-参数
    [ PHP+jQuery ] ajax 多级联动菜单的应用:电商网站的用户地址选择功能 ( 二 )
    使用Python爬取网页的相关内容(图片,文字,链接等等)
    使用Python爬取网页的相关内容(图片,文字,链接等等)
    使用Pycharm安装插件时发生错误
    使用Pycharm安装插件时发生错误
    使用Pycharm安装插件时发生错误
  • 原文地址:https://www.cnblogs.com/12yang-ting/p/7496242.html
Copyright © 2011-2022 走看看