java 各版本新特性

Java 5,6,7,8,9,10,11新特性吐血总结

lkd_whh关注赞赏支持

12018.04.01 14:09:15字数 1,948阅读 10,615

作者:拔剑少年

简书地址:https://www.jianshu.com/u/dad4d9675892
博客地址:https://it18monkey.github.io
转载请注明出处

java5

  1. 泛型 (Generics)

     List<Integer> list=new ArrayList<Integer>();
  2. 增强循环(Enhanced for Loop)
     int[] array = {1, 2, 3, 4, 5};
     for (int i : array) {
        System.out.println(i);
     } 
  3. 自动封箱拆箱(Autoboxing/Unboxing )。八大基本类型和它们的包装类能够自动的相互转换。
  4. 枚举(Typesafe Enums)。

    ps:枚举是一种实现线程安全的单例模式的好方式。

     enum TestEnum{
            one,
            two;
            TestEnum() {
            }
        }
  5. 可变参数 (Varargs)

    语法:(type... arguments)

    可变参数本质仍然是用一个数组存储参数,只是java隐藏了这一过程。需要注意的是如果一个方法声明中含有可变参数,那必须放在最后一个位置。

         /**
         * 可变参数测试
         *
         * @param args
         */
        public static void testVarargs(String... args) {
            //本质就是个数组
            System.out.println(args[1]);
            for (String arg : args) {
                System.out.println(arg);
            }
        }
  6. 静态导入(Static Import)。通过import类来使用类里的静态变量或方法(直接通过名字,不需要加上类名.),简化了代码的书写。
    //单个导入
    import static java.lang.Math.PI;
    //批量导入
    import static java.lang.Math.*;

    ps:过去的版本中只能通过继承类或实现接口才能使用。

  7. 注解(Annotations)。关键字@interface
    //注释注解的注解又叫做元注解
    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.METHOD)
    public @interface MyAnnotations {
        //注解内可以添加方法,也可以不添加
        //注解方法的返回值只能是基本类型,String,Class类,枚举,注解,可以有默认值。
        int id();
        String name() default "whh";
        Class classType();
        TestEnum enumType();
    }
  8. 新的线程模型和并发库(java.util.concurrent)。

java6

  1. 集合框架增强。
  • 为了更好的支持双向访问集合。添加了许多新的类和接口。
  • 新的数组拷贝方法。Arrays.copyOfArrays.copyOfRange
//以下为添加的新接口和类
Deque,BlockingDeque,NavigableSet,NavigableMap,ConcurrentNavigableMap,ArrayDeque, ConcurrentSkipListSet ,ConcurrentSkipListMap,ConcurrentSkipListMap ,AbstractMap.SimpleEntry ,AbstractMap.SimpleImmutableEntry
  1. Scripting. 可以让其他语言在java平台上运行。 java6包含了一个基于Mozilla Rhino实现的javascript脚本引擎。
  2. 支持JDBC4.0规范。

java7

  1. 二进制前缀0b或者0B。整型(byte, short, int, long)可以直接用二进制表示。

      //二进制字面值前缀0b 或0B
        int i = 0b010;//10进制值为2
        int j = 0B010;
  2. 字面常量数字的下划线。用下划线连接整数提升其可读性,自身无含义,不可用在数字的起始和末尾。
    //数字间的下划线不影响实际值
     int k = 1_1;//值为11
  1. switch 支持String类型。
  2. 泛型实例化类型自动推断。
    Map<String, List<String>> myMap = new HashMap<String, List<String>>();    // 之前
    Map<String, List<String>> myMap = new HashMap<>();        // 现在
    
  3. try-with-resources语句。
       /*
         * 声明在try括号中的对象称为资源,在方法执行完毕后会被自动关闭,相对与之前必须在finally关闭资源,这一特性大大提高了代码的简洁性。
         * 所有实现java.lang.AutoCloseable接口的类都作为资源被自动关闭。
        */
       try (BufferedReader reader=new BufferedReader(new FileReader("d:1.txt"))){
          return reader.readLine();
      }
  1. 单个catch中捕获多个异常类型(用| 分割)并通过改进的类型检查重新抛出异常。

java8

  1. lambada表达式(Lambda Expressions)。Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)。
  2. 方法引用(Method references)。方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,可以使语言的构造更紧凑简洁,减少冗余代码。
  3. 默认方法(Default methods)。默认方法允许将新功能添加到库的接口中,并确保兼容实现老版本接口的旧有代码。
  4. 重复注解(Repeating Annotations)。重复注解提供了在同一声明或类型中多次应用相同注解类型的能力。
  5. 类型注解(Type Annotation)。在任何地方都能使用注解,而不是在声明的地方。
  6. 类型推断增强。
  7. 方法参数反射(Method Parameter Reflection)。
  8. Stream API 。新添加的Stream API(java.util.stream) 把真正的函数式编程风格引入到Java中。Stream API集成到了Collections API里。
  9. HashMap改进,在键值哈希冲突时能有更好表现。
  10. Date Time API。加强对日期和时间的处理。
  11. java.util 包下的改进,提供了几个实用的工具类。
    • 并行数组排序。
    • 标准的Base64编解码。
    • 支持无符号运算。
  12. java.util.concurrent 包下增加了新的类和方法。
    • java.util.concurrent.ConcurrentHashMap 类添加了新的方法以支持新的StreamApi和lambada表达式。
    • java.util.concurrent.atomic 包下新增了类以支持可伸缩可更新的变量。
    • java.util.concurrent.ForkJoinPool类新增了方法以支持 common pool。
    • 新增了java.util.concurrent.locks.StampedLock类,为控制读/写访问提供了一个基于性能的锁,且有三种模式可供选择。
  13. HotSpot
    • 删除了 永久代(PermGen).
    • 方法调用的字节码指令支持默认方法。

java9

  1. java模块系统 (Java Platform Module System)。
  2. 新的版本号格式。$MAJOR.$MINOR.$SECURITY.$PATCH
  3. java shell,交互式命令行控制台。
  4. private instance methods方法上可以使用@SafeVarargs注解。
  5. diamond语法与匿名内部类结合使用。
  6. 下划线_不能单独作为变量名使用。
  7. 支持私有接口方法(您可以使用diamond语法与匿名内部类结合使用)。
  8. Javadoc
    • 简化Doclet API。
    • 支持生成HTML5格式。
    • 加入了搜索框,使用这个搜索框可以查询程序元素、标记的单词和文档中的短语。
    • 支持新的模块系统。
  9. JVM
    • 增强了Garbage-First(G1)并用它替代Parallel GC成为默认的垃圾收集器。
    • 统一了JVM 日志,为所有组件引入了同一个日志系统。
    • 删除了JDK 8中弃用的GC组合。(DefNew + CMS,ParNew + SerialOld,Incremental CMS)。
  10. properties文件支持UTF-8编码,之前只支持ISO-8859-1
  11. 支持Unicode 8.0,在JDK8中是Unicode 6.2

java10

  1. 局部变量类型推断(Local-Variable Type Inference)

    //之前的代码格式
    URL url = new URL("http://www.oracle.com/");
    URLConnection conn = url.openConnection();
    Reader reader = new BufferedReader(
        new InputStreamReader(conn.getInputStream()))
    //java10中用var来声明变量
    var url = new URL("http://www.oracle.com/");
    var conn = url.openConnection();
    var reader = new BufferedReader(
        new InputStreamReader(conn.getInputStream()));
    

    var是一个保留类型名称,而不是关键字。所以之前使用var作为变量、方法名、包名的都没问题,但是如果作为类或接口名,那么这个类和接口就必须重命名了。

    var的使用场景主要有以下四种:

    • 本地变量初始化。
    • 增强for循环中。
    • 传统for循环中声明的索引变量。
    • Try-with-resources 变量。
  2. Optional类添加了新的方法orElseThrow(无参数版)。相比于已经存在的get方法,这个方法更推荐使用。

java11

  1. 支持Unicode 10.0,在jdk10中是8.0。
  2. 标准化HTTP Client
  3. 编译器线程的延迟分配。添加了新的命令-XX:+UseDynamicNumberOfCompilerThreads动态控制编译器线程的数量。
  4. 新的垃圾收集器—ZGC。一种可伸缩的低延迟垃圾收集器(实验性)。
  5. Epsilon。一款新的实验性无操作垃圾收集器。Epsilon GC 只负责内存分配,不实现任何内存回收机制。这对于性能测试非常有用,可用于与其他GC对比成本和收益。
  6. Lambda参数的局部变量语法。java10中引入的var字段得到了增强,现在可以用在lambda表达式的声明中。如果lambda表达式的其中一个形式参数使用了var,那所有的参数都必须使用var。

参考链接:

原文地址:https://www.cnblogs.com/leigepython/p/12069036.html

时间: 2024-10-25 17:17:16

java 各版本新特性的相关文章

Atitit..jdk&#160;java&#160;各版本新特性&#160;1.0&#160;1.1&#160;1.2&#160;1.3&#160;1.4&#160;1.5(5.0)&#160;1.6(6.0)&#160;7.0&#160;8.0&#160;9.0&#160;attilax&#160;大总结

Atitit..jdk java 各版本新特性 1.0 1.1 1.2 1.3 1.4 1.5(5.0) 1.6(6.0) 7.0 8.0 9.0 attilax 大总结 1.1. Java的编年史2 1.2. Java版本:JDK 1.02 1.3. Java版本:JDK 1.13 1.4. Java版本:JDK 1.2 (Java 2)4 1.4.1. 1999年5 1.4.2. 2000年5 1.5. Java版本:JDK 1.35 1.5.1. 2001年6 1.5.2. 2002年7

记 Java 各版本新特性

Java 8 —— 下面主要讲9个特性: Lambda 表达式(也可以称为“闭包”): (paramList) -> expression; 或者 (paramList) -> {statments;} 特征: 参数类型声明可选:编译器可识别参数值 只有一个表达式,那么表达式的值作为 Lambda 的返回值:用大括号 {} 括起来的,多个表达式,需要使用 return 关键字指明返回值 Lambda 中不能声明和任何局部变量同名的,参数或者局部变量 演示用例: public interface

c# .net 3.5 4.0 4.5 5.0 6.0各个版本新特性战略规划总结【转载】

引用:http://blog.csdn.net/attilax/article/details/42014327 c# .net 3.5 4.0 各个版本新特性战略规划总结 1. --------------.Net Framework版本同CLR版本的关系1 2. paip.------------SDK2.0功能-------------2 2.1. 泛型:2 3. --------------sdk3.0  增加了以下功能..2 3.1. LINQ 3 4.  ----------sdk4

JDK1.5-1.8各版本新特性

JDK各个版本的新特性 对于很多刚接触java语言的初学者来说,要了解一门语言,最好的方式就是要能从基础的版本进行了解,升级的过程,以及升级的新特性,这样才能循序渐进的学好一门语言.今天先为大家介绍一下JDK1.5版本到JDK1.7版本的特性.希望能给予帮助. JDK1.5新特性: 1.自动装箱与拆箱: 自动装箱的过程:每当需要一种类型的对象时,这种基本类型就自动地封装到与它相同类型的包装中. 自动拆箱的过程:每当需要一个值时,被装箱对象中的值就被自动地提取出来,没必要再去调用intValue(

Atitit.jquery 版本新特性attilax总结

Atitit.jquery 版本新特性attilax总结 1. Jq1.4 1 2. 1.5 1 3. 1.6 3 4. Jq1.7 3 ⒉提升了事件委派时的性能有了大幅度的提升,尤其是在ie7下: 4 ⒊更好的在 ie 6/7/8 上支持 html5: 4 ⒋切换动画更加直观: 4 ⒌匿名模块定义 awd 4 ⒍jQuery.Deferred 4 ⒎jQuery.isNumeric() 4 5. Jq1.8 5 5.1. jQuery 1.8 5 5.1.1. 可定制 5 5.1.2. 自动生

Atitit.c# .net 3.5 4.0 各个版本新特性战略规划总结

Atitit.c# .net 3.5 4.0 各个版本新特性战略规划总结 1. --------------.Net Framework版本同CLR版本的关系 1 2. paip.------------SDK2.0功能------------- 2 2.1. 泛型: 2 3. --------------sdk3.0  增加了以下功能.. 2 3.1. LINQ 3 4.  ----------sdk4.0 新加功能------------ 3 5. ].Net4.5的五项强大新特性 3 5.

Java SE 6 新特性: HTTP 增强--转

概述 Java 语言从诞生的那天起,就非常注重网络编程方面的应用.随着互联网应用的飞速发展,Java 的基础类库也不断地对网络相关的 API 进行加强和扩展.在 Java SE 6 当中,围绕着 HTTP 协议出现了很多实用的新特性:NTLM 认证提供了一种 Window 平台下较为安全的认证机制:JDK 当中提供了一个轻量级的 HTTP 服务器:提供了较为完善的 HTTP Cookie 管理功能:更为实用的 NetworkInterface:DNS 域名的国际化支持等等. NTLM 认证 不可

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集合接口的实现类,如:ArrayLi

Java 8的新特性—终极版

声明:本文翻译自Java 8 Features Tutorial – The ULTIMATE Guide,翻译过程中发现并发编程网已经有同学翻译过了:Java 8 特性 – 终极手册,我还是坚持自己翻译了一版(写作驱动学习,加深印象),有些地方参考了该同学的. Java 8 前言: Java 8 已经发布很久了,很多报道表明Java 8 是一次重大的版本升级.在Java Code Geeks上已经有很多介绍Java 8新特性的文章,例如Playing with Java 8 – Lambdas