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

java5

1.泛型 (Generics)

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

2.增强循环(Enhanced for Loop)

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

4.枚举(Typesafe Enums)。

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

5.可变参数 (Varargs)

语法:(type... arguments)

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

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

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

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

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)可以直接用二进制表示。

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

 //数字间的下划线不影响实际值 int k = 1_1;//值为11
  1. switch 支持String类型。
  2. 泛型实例化类型自动推断。

3.try-with-resources语句。

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)

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/CQqf/p/10860874.html

时间: 2024-10-22 15:52:01

Java 5,6,7,8,9,10,11新特性超详细总结的相关文章

C++:C++11新特性超详细版(1)

前言: 虽然目前没有编译器能够完全实现C++11,但这并不意味着我们不需要了解,学习它.深入学习C++11,你会发现这根本就是一门新的语言,它解决了c++98中许多遗留下来的问题.早晚会有一天,C++11便会普及大部分编译器.因此,提早做些准备也是应该的. 在此我想做一个关于C++11的专题,将C++11的新特性进行一一讲解,以通俗易懂的语言及例子帮助读者入门C++11.本文便是C++11新特性超详细版系列文章的第一篇, 即C++:[C++11]新特性超详细版(1). 不过我要强调的是,这些文章

Java 9和Java 10的新特性

http://www.infoq.com/cn/news/2014/09/java9 Java 9新特性汇总 继2014年3月份Java 8发布之后,Open JDK加快了开发速度, Java 9的发布已经提上日程.预计在2016年发布Java 9,同时公布了JEP(JDK改进提议)中的前期列表.任职于Takipi 的Alex Zhitnitsky整理了Java 9中一些纳入JSR(Java规范提案)的新特性和大家一直期待但未确定的一些特性.这些特性有Jigsaw项目.新的智能编译工具.期待已久

C++11 新特性之 序列for循环

在C++中在C++中for循环可以使用类似java的简化的for循环,可以用于遍历数组,容器,string以及由begin和end函数定义的序列(即有Iterator) #include <iostream> #include <map> #include <string> using namespace std; int main() { map<string, int> ms; ms.insert(make_pair("a", 1))

Java5~11新特性

Java5~11版本新特性 Java5 Java6 Java7 Java8 Java9 Java10 Java11 Java5 Java5开发代号为Tiger(老虎),于2004-09-30发行 特性列表 泛型 枚举 自动装箱拆箱 可变参数 注解 foreach循环(增强for.for/in) 静态导入 格式化(System.out.println 支持%s %d等格式化输出) 线程框架/数据结构 JUC Arrays工具类/StringBuilder/instrument 1.泛型 所谓类型擦

【C++11】30分钟了解C++11新特性

作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 什么是C++11 C++11是曾经被叫做C++0x,是对目前C++语言的扩展和修正,C++11不仅包含核心语言的新机能,而且扩展了C++的标准程序库(STL),并入了大部分的C++ Technical Report 1(TR1)程序库(数学的特殊函数除外). C++11包括大量的新特性:包括lambda表达式,类型推导关键字auto.decl

C++11 新特性(5) 统一初始化

在C++11之前,初始化的类型并非总是统一的. 例如以下两个man定义,一个作为结构,一个作为类.两者的初始化是不一样的. #include <iostream> using namespace std; struct manStruct{ string name; int age; }; class manClass { private: string name; int age; public: manClass(string s,int a):name(s),age(a){ } }; i

[cocos2d-x] 一些C++ 11新特性的引入

1.auto关键字的使用 auto关键字原理     在定义变量的时候必须申明类型,c++是强语言类型,在编译阶段需要知道类型,这样的好处是程序效率更高,而动态语言不需要类型申明的需要自推导变量类型.使用了auto是不是c++效率会变慢?完全不是,因为在编译阶段编译器已经帮程序员推导好了变量的类型.前提条件是编译器可以根据当前的程序的状态推导出变量类型.只是编译器更加智能,可能会增加编译工作,但是不会影响运行效率. 实例1:申明普通变量 auto num = 10; 实例2: vector<st

C++11 新特性(6) 基于范围的for循环

C++11中添加了一项基于范围的for循环,这可以省却我们很多的代码量. 来自维基百科的解释:http://zh.wikipedia.org/wiki/C++0x#.E5.80.99.E9.81.B8.E8.AE.8A.E6.9B.B4 Boost C++ 定义了许多"范围 (range) "的概念.范围表现有如受控制的列表 (list),持有容器中的两点.有序容器是范围概念的超集 (superset),有序容器中的两个迭代器 (iterator) 也能定义一个范围.这些概念以及操作的

Cocos2d-x 3.1.1 学习日志6--30分钟了解C++11新特性

新的关键字 auto C++11中引入auto第一种作用是为了自动类型推导 auto的自动类型推导,用于从初始化表达式中推断出变量的数据类型.通过auto的自动类型推导,可以大大简化我们的编程工作.auto实际上实在编译时对变量进行了类型推导,所以不会对程序的运行效率造成不良影响.另外,似乎auto并不会影响编译速度,因为编译时本来也要右侧推导然后判断与左侧是否匹配.如果没有auto关键字 写个迭代器要写很长长,这也算是节省了我们的脑细胞吧,~~~~(>_<)~~~~ !! auto a; /