Java 5,6,7,8,9,10,11新特性
转自https://it18monkey.github.io
java5
泛型 (Generics)
List<Integer> list=new ArrayList<Integer>();
增强循环(Enhanced for Loop)
int[] array = {1, 2, 3, 4, 5};
for (int i : array) {
System.out.println(i);
}
自动封箱拆箱(Autoboxing/Unboxing )。八大基本类型和它们的包装类能够自动的相互转换。
枚举(Typesafe Enums)。
ps:枚举是一种实现线程安全的单例模式的好方式。
enum TestEnum{
one,
two;
TestEnum() {
}
}
可变参数 (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);
}
}
静态导入(Static Import)。通过import类来使用类里的静态变量或方法(直接通过名字,不需要加上
类名.
),简化了代码的书写。//单个导入
import static java.lang.Math.PI;
//批量导入
import static java.lang.Math.*;
ps:过去的版本中只能通过继承类或实现接口才能使用。
注解(Annotations)。关键字
@interface
。//注释注解的注解又叫做元注解
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnnotations {
//注解内可以添加方法,也可以不添加
//注解方法的返回值只能是基本类型,String,Class类,枚举,注解,可以有默认值。
int id();
String name() default "whh";
Class classType();
TestEnum enumType();
}新的线程模型和并发库(
java.util.concurrent
)。
java6
- 集合框架增强。
- 为了更好的支持双向访问集合。添加了许多新的类和接口。
- 新的数组拷贝方法。
Arrays.copyOf
和Arrays.copyOfRange
//以下为添加的新接口和类
Deque,BlockingDeque,NavigableSet,NavigableMap,ConcurrentNavigableMap,ArrayDeque, ConcurrentSkipListSet ,ConcurrentSkipListMap,ConcurrentSkipListMap ,AbstractMap.SimpleEntry ,AbstractMap.SimpleImmutableEntry
- Scripting. 可以让其他语言在java平台上运行。 java6包含了一个基于Mozilla Rhino实现的javascript脚本引擎。
- 支持JDBC4.0规范。
java7
二进制前缀
0b
或者0B
。整型(byte, short, int, long)可以直接用二进制表示。//二进制字面值前缀0b 或0B
int i = 0b010;//10进制值为2
int j = 0B010;
字面常量数字的下划线。用下划线连接整数提升其可读性,自身无含义,不可用在数字的起始和末尾。
//数字间的下划线不影响实际值
int k = 1_1;//值为11
- switch 支持String类型。
泛型实例化类型自动推断。
Map<String, List<String>> myMap = new HashMap<String, List<String>>(); // 之前
Map<String, List<String>> myMap = new HashMap<>(); // 现在
try-with-resources语句。
/*
* 声明在try括号中的对象称为资源,在方法执行完毕后会被自动关闭,相对与之前必须在finally关闭资源,这一特性大大提高了代码的简洁性。
* 所有实现java.lang.AutoCloseable接口的类都作为资源被自动关闭。
*/
try (BufferedReader reader=new BufferedReader(new FileReader("d:1.txt"))){
return reader.readLine();
}
- 单个catch中捕获多个异常类型(用
|
分割)并通过改进的类型检查重新抛出异常。
java8
- lambada表达式(Lambda Expressions)。Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)。
- 方法引用(Method references)。方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,可以使语言的构造更紧凑简洁,减少冗余代码。
- 默认方法(Default methods)。默认方法允许将新功能添加到库的接口中,并确保兼容实现老版本接口的旧有代码。
- 重复注解(Repeating Annotations)。重复注解提供了在同一声明或类型中多次应用相同注解类型的能力。
- 类型注解(Type Annotation)。在任何地方都能使用注解,而不是在声明的地方。
- 类型推断增强。
- 方法参数反射(Method Parameter Reflection)。
- Stream API 。新添加的Stream API(java.util.stream) 把真正的函数式编程风格引入到Java中。Stream API集成到了Collections API里。
- HashMap改进,在键值哈希冲突时能有更好表现。
- Date Time API。加强对日期和时间的处理。
- java.util 包下的改进,提供了几个实用的工具类。
- 并行数组排序。
- 标准的Base64编解码。
- 支持无符号运算。
- java.util.concurrent 包下增加了新的类和方法。
java.util.concurrent.ConcurrentHashMap
类添加了新的方法以支持新的StreamApi和lambada表达式。java.util.concurrent.atomic
包下新增了类以支持可伸缩可更新的变量。java.util.concurrent.ForkJoinPool
类新增了方法以支持 common pool。- 新增了
java.util.concurrent.locks.StampedLock
类,为控制读/写访问提供了一个基于性能的锁,且有三种模式可供选择。
- HotSpot
- 删除了 永久代(PermGen).
- 方法调用的字节码指令支持默认方法。
java9
- java模块系统 (Java Platform Module System)。
- 新的版本号格式。
$MAJOR.$MINOR.$SECURITY.$PATCH
- java shell,交互式命令行控制台。
- 在
private instance methods
方法上可以使用@SafeVarargs
注解。 - diamond语法与匿名内部类结合使用。
- 下划线
_
不能单独作为变量名使用。 - 支持私有接口方法(您可以使用diamond语法与匿名内部类结合使用)。
- Javadoc
- 简化Doclet API。
- 支持生成HTML5格式。
- 加入了搜索框,使用这个搜索框可以查询程序元素、标记的单词和文档中的短语。
- 支持新的模块系统。
- JVM
- 增强了
Garbage-First(G1)
并用它替代Parallel GC
成为默认的垃圾收集器。 - 统一了JVM 日志,为所有组件引入了同一个日志系统。
- 删除了JDK 8中弃用的GC组合。(DefNew + CMS,ParNew + SerialOld,Incremental CMS)。
- 增强了
- properties文件支持
UTF-8
编码,之前只支持ISO-8859-1
。 - 支持
Unicode 8.0
,在JDK8中是Unicode 6.2
。
java10
局部变量类型推断(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 变量。
Optional
类添加了新的方法orElseThrow
(无参数版)。相比于已经存在的get方法,这个方法更推荐使用。
java11
- 支持
Unicode 10.0
,在jdk10中是8.0。 - 标准化HTTP Client
- 编译器线程的延迟分配。添加了新的命令
-XX:+UseDynamicNumberOfCompilerThreads
动态控制编译器线程的数量。 - 新的垃圾收集器—ZGC。一种可伸缩的低延迟垃圾收集器(实验性)。
- Epsilon。一款新的实验性无操作垃圾收集器。Epsilon GC 只负责内存分配,不实现任何内存回收机制。这对于性能测试非常有用,可用于与其他GC对比成本和收益。
- Lambda参数的局部变量语法。java10中引入的var字段得到了增强,现在可以用在lambda表达式的声明中。如果lambda表达式的其中一个形式参数使用了var,那所有的参数都必须使用var。
作者:lkd_whh
链接:https://www.jianshu.com/p/38985b61ea83
Java 5,6,7,8,9,10,11新特性的更多相关文章
- Java 9和Java 10的新特性
http://www.infoq.com/cn/news/2014/09/java9 Java 9新特性汇总 继2014年3月份Java 8发布之后,Open JDK加快了开发速度, Java 9的发 ...
- Java 10 的 10 个新特性,将彻底改变你写代码的方式!
Java 9才发布几个月,很多玩意都没整明白,现在Java 10又快要来了.. 这时候我真尼玛想说:线上用的JDK 7 甚至JDK 6,JDK 8 还没用熟,JDK 9 才发布不久不知道啥玩意,JDK ...
- Java 10 的 10 个新特性,你颤抖了吗?
Java 9才发布几个月,很多玩意都没整明白,现在Java 10又快要来了.. 这时候我真尼玛想说:线上用的JDK 7 甚至JDK 6,JDK 8 还没用熟,JDK 9 才发布不久不知道啥玩意,JDK ...
- Java 10的10个新特性,将彻底改变你写代码的方式!
Java 9才发布几个月,很多玩意都没整明白,现在Java 10又快要来了.. 这时候我真尼玛想说:线上用的JDK 7 甚至JDK 6,JDK 8 还没用熟,JDK 9 才发布不久不知道啥玩意,JDK ...
- [转载] C++11新特性
C++11标准发布已有一段时间了, 维基百科上有对C++11新标准的变化和C++11新特性介绍的文章. 我是一名C++程序员,非常想了解一下C++11. 英文版的维基百科看起来非常费劲,而中文版维基百 ...
- Java5~11新特性
Java5~11版本新特性 Java5 Java6 Java7 Java8 Java9 Java10 Java11 Java5 Java5开发代号为Tiger(老虎),于2004-09-30发行 特性 ...
- [转] Scala 2.10.0 新特性之字符串插值
[From] https://unmi.cc/scala-2-10-0-feature-string-interpolation/ Scala 2.10.0 新特性之字符串插值 2013-01-20 ...
- JDK 5 ~ 11 新特性倾情整理
为了大家对JDK有一个全面的了解,下面我为大家整理了JDK5~11的所有关键新特性! 先看一下JDK的版本迭代图: 注: OpenJDK和JDK区别 GPL协议通用性公开许可证(General ...
- C++ 11学习和掌握 ——《深入理解C++ 11:C++11新特性解析和应用》读书笔记(一)
因为偶然的机会,在图书馆看到<深入理解C++ 11:C++11新特性解析和应用>这本书,大致扫下,受益匪浅,就果断借出来,对于其中的部分内容进行详读并亲自编程测试相关代码,也就有了整理写出 ...
- C++11新特性总结 (二)
1. 范围for语句 C++11 引入了一种更为简单的for语句,这种for语句可以很方便的遍历容器或其他序列的所有元素 vector<int> vec = {1,2,3,4,5,6}; ...
随机推荐
- 【miscellaneous】最新HEVC/H.265 4K视频,显卡解码测试
转载自:http://bbs.zol.com.cn/diybbs/d34441_76103.html 4K这个概念也在最近几年开始流行了起来,无论是4K显示器.4K电视盒子,还是4K游戏对硬件的要求也 ...
- 【DSP开发】【Linux开发】IIC设备驱动程序
IIC设备是一种通过IIC总线连接的设备,由于其简单性,被广泛引用于电子系统中.在现代电子系统中,有很多的IIC设备需要进行相互之间通信 IIC总线是由PHILIPS公司开发的两线式串行总线,用于连接 ...
- 【Linux开发】linux设备驱动归纳总结(十三):1.触摸屏与ADC时钟
linux设备驱动归纳总结(十三):1.触摸屏与ADC时钟 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...
- [xpath] text()和string()区别
质区别 text()是一个node test,而string()是一个函数,data()是一个函数且可以保留数据类型.此外,还有点号(.)表示当前节点. 使用要点 XML例子: <book> ...
- Java小知识-----Map 按Key排序和按Value排序
Map排序的方式有很多种,这里记录下自己总结的两种比较常用的方式:按键排序(sort by key), 按值排序(sort by value). 1.按键排序 jdk内置的java.util包下的Tr ...
- [转帖]RPM的原理及rpm命令常用参数
RPM的原理及rpm命令常用参数 2015年09月14日 15:39:43 lose_wait 阅读数 1298 https://blog.csdn.net/u012012939/article/de ...
- [转帖]备忘:CentOS-7 使用systemctl 管理的服务,文件打开数上限1024要改
备忘:CentOS-7 使用systemctl 管理的服务,文件打开数上限1024要改 https://blog.csdn.net/toontong/article/details/50440272 ...
- Python学习【day01】- Python初识
Python下载:https://www.python.org/downloads/ 下载后进行安装,安装后的Python我们称之为Python解析器 1.打印“Hello World” 安装后的Py ...
- JAVAEE 7 api.chm
JAVAEE 7 api.chm 链接:https://pan.baidu.com/s/1LUD3oam5B-Hp8tdpfQYk2w 提取码:x1kc
- C语言&*符号使用及大端法小端法测试
工具:Microsoft Visual C++ 6.0 例子: int a = 1; int* b = &a; C语言规定a表示存储单元中的数据,&a表示存储单元的地址,b存储的就是a ...