Java 5,6,7,8,9,10,11新特性超详细总结

java5

1.泛型 (Generics)javascript

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

2.加强循环(Enhanced for Loop)java

Java 5,6,7,8,9,10,11新特性超详细总结

 

3.自动封箱拆箱(Autoboxing/Unboxing )。八大基本类型和它们的包装类可以自动的相互转换。shell

4.枚举(Typesafe Enums)。编程

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

Java 5,6,7,8,9,10,11新特性超详细总结

 

5.可变参数 (Varargs)安全

语法:(type... arguments)并发

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

Java 5,6,7,8,9,10,11新特性超详细总结

 

6.静态导入(Static Import)。经过import类来使用类里的静态变量或方法(直接经过名字,不须要加上类名.),简化了代码的书写。函数式编程

Java 5,6,7,8,9,10,11新特性超详细总结

 

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

7.注解(Annotations)。关键字@interface。

Java 5,6,7,8,9,10,11新特性超详细总结

 

8.新的线程模型和并发库(java.util.concurrent)。

java6

1.集合框架加强。

  • 为了更好的支持双向访问集合。添加了许多新的类和接口。
  • 新的数组拷贝方法。Arrays.copyOf和Arrays.copyOfRange
//如下为添加的新接口和类
Deque,BlockingDeque,NavigableSet,NavigableMap,ConcurrentNavigableMap,ArrayDeque, ConcurrentSkipListSet ,ConcurrentSkipListMap,ConcurrentSkipListMap ,AbstractMap.SimpleEntry ,AbstractMap.SimpleImmutableEntry

2.Scripting. 可让其余语言在java平台上运行。 java6包含了一个基于Mozilla Rhino实现的javascript脚本引擎。

3.支持JDBC4.0规范。

java7

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

Java 5,6,7,8,9,10,11新特性超详细总结

 

2.字面常量数字的下划线。用下划线链接整数提高其可读性,自身无含义,不可用在数字的起始和末尾。

 //数字间的下划线不影响实际值
int k = 1_1;//值为11
  1. switch 支持String类型。
  2. 泛型实例化类型自动推断。
Java 5,6,7,8,9,10,11新特性超详细总结

 

3.try-with-resources语句。

Java 5,6,7,8,9,10,11新特性超详细总结

 

4.单个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)

Java 5,6,7,8,9,10,11新特性超详细总结

 

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。
相关文章
相关标签/搜索