Java8,java9和java11的特性和区别!
Java8,java9和java11的特性总结!
Java 8 的主要新特性
1. Lambda 表达式
Lambda 允许把函数作为⼀个⽅法的参数传递进⽅法中。
作⽤:解决 Java 被诟病的匿名内部类的问题。
2. 接⼝中可增加了默认⽅法
作⽤:在接⼝中也可以有实现⽅法了。
3. HashMap 底层数据结构的变化
java 8 之前,HashMap 底层的数据结构是数组+链表实现的, Java 8 之后是数组+链表+红⿊树实现的,当链表的长度超过 8 之后,会转换成红⿊树。
作⽤:解决因哈希冲突导致的链表过长,查询效率低的问题。
4. Stream API
新添加 Stream API (java.util.stream),把真正函数式编程的风格引⼊ Java。
5. 提供⼀个新的 JavaScript 引擎
Java 8 提供了⼀个新的 Nashorn JavaScript 引擎,它允许在 JVM 上运⾏特定的 JavaScript 应⽤。
作⽤:解决⽇益增长的 Java 跟 JS 交互混合的需求。
Java 9 新特性
1. 模块系统
模块是⼀个包的容器,Java 9 最⼤的变化之⼀是引⼊模块系统。(Jigsaw 项⽬)
作⽤:解决⼤型项⽬模块化开发的需求。
2. ⽀持 HTTP/2 标准
HTTP/2 标准是 HTTP 协议的最新版本,新的 HTTPClient API ⽀持 Websocket 和 HTTP2 流以及服务器推送特性。
3. 提供创建不可变集合的静态⼯⼚⽅法
List、Set、Map 接⼝中,提供新的静态⼯⼚⽅法直接创建不可变的集合实例。
作⽤:创建不可变集合更⽅便,⼀⾏代码就搞定,节省了开销。
4. 私有接⼝⽅法
在接⼝中也允许编写 private 修饰的私有⽅法了。
作⽤:增强了接⼝的功能,提⾼了可扩展性。
5. 轻量级的 JSON API
内置了⼀个轻量级的 JSON API。
6. 引⼊响应式流 API
Java 9 引⼊了新的响应式流 API。
Java11的新特性
1、本地变量类型推断
什么是局部变量类型推断?
var javastack = "javastack";
System.out.println(javastack);
⼤家看出来了,局部变量类型推断就是左边的类型直接使⽤ var 定义,⽽不⽤写具体的类型,编译器能根据右边的表达式⾃动推断类型,如上⾯的 String 。
字符串函数strip的作用var javastack = "javastack";
就等于:
String javastack = "javastack";
2、字符串加强
Java 11 增加了⼀系列的字符串处理⽅法,如以下所⽰。
// 判断字符串是否为空⽩
" ".isBlank(); // true
// 去除⾸尾空格
" Javastack ".strip(); // "Javastack"
// 去除尾部空格
" Javastack ".stripTrailing(); // " Javastack"
// 去除⾸部空格
" Javastack ".stripLeading(); // "Javastack "
// 复制字符串
"Java".repeat(3);// "JavaJavaJava"
// ⾏数统计
"A\nB\nC".lines().count(); // 3
3、集合加强
⾃ Java 9 开始,Jdk ⾥⾯为集合(List/ Set/ Map)都添加了 of 和 copyOf ⽅法,它们两个都⽤来创建不可变的集合。
4、Stream 加强
Stream 是 Java 8 中的新特性,Java 9 开始对 Stream 增加了以下3个新⽅法。
1) 增加单个参数构造⽅法,
2) 增加 takeWhile 和 dropWhile ⽅法
3)iterate重载
这个 iterate ⽅法的新重载⽅法,可以让你提供⼀个 Predicate (判断条件)来指定什么时候结束迭代。
5、Optional 加强
Opthonal 也增加了⼏个⾮常酷的⽅法,现在可以很⽅便的将⼀个 Optional 转换成⼀个 Stream, 或者当⼀个空 Optional 时给它⼀个替代的。
6、InputStream 加强
InputStream 终于有了⼀个⾮常有⽤的⽅法:transferTo,可以⽤来将数据直接传输到 OutputStream,这是在处理原始数据流时⾮常常见的⼀种⽤法。
7、HTTP Client API
这是 Java 9 开始引⼊的⼀个处理 HTTP 请求的的孵化 HTTP Client API,该 API ⽀持同步和异步,⽽在 Java 11 中已经为正式可⽤状态,你可以在 java 包中到这个 API。
8、化繁为简,⼀个命令编译运⾏源代码
在我们的认知⾥⾯,要运⾏⼀个 Java 源代码必须先编译,再运⾏,两步执⾏动作。⽽在Java 11 版本中,通过⼀个 java 命令就直接搞定了。
喜欢这样⽂章的可以关注我,我会持续更新,你们的关注是我更新的动⼒!需要更多java学习资料的也可以私信我!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论