JAVA9/10/11新特性
Java 9 新特性
模块化系统(Modularity)
- 本质上来讲,模块的概念就是在package外再裹一层,可以指定哪些部分可以暴露,哪些部分可以隐藏。
Java的REPL工具:jShell命令
- 设计理念:即写即得,快速运行
- REPL:read - evaluate - print - loop
- 命令行输入jShell即可进入,输入/help可获得帮助
语法改进:接口的私有方法
- 接口中的私有方法只能自己调用
钻石操作符的使用升级
- 钻石操作符与匿名内部类在java 8中不能共存,现在可以了
语法改进:try语句
Java 8中,可以实现资源的自动关闭,但是要求执行后必须关闭的所有资源必须在try子句中初始化,否则编译不通过
1
2
3
4
5
6
7
8
9
10try(InputStreamReader reader = new InputStreamReader(System.in)){
char[] cbuf = new char[20];
int len;
if ((len = reader.read(cbuf)) != -1) {
String str = new String(cbuf, 0, len);
System.out.println(str);
}
} catch (IOException e) {
throw new RuntimeException(e);
}Java 9中,可以在try子句中使用已经初始化过的资源,此时的资源是final的
1 | InputStreamReader reader = new InputStreamReader(System.in); |
String存储结构变更
- String再也不同char[] 来存储了,改成了byte[]加上编码标记,节约了一些时间
集合工厂方法(创建只读集合)
- Java 8中的写法
1 | List<String> namesList = new ArrayList<>(); |
- Java 9
1 | List<Integer> list1 = List.of(1, 2, 3, 4, 5); |
InputStream加强
transferTo():把输入流中的所有数据直接自动地复制到输出流中
1
2
3
4
5
6
7ClassLoader cl = this.getClass().getClassLoader();
try(InputStream is = cl.getResourceAsStream("hello.txt");
OutputStream os = new FileOutputStream("hello1.txt")){
is.transferTo(os);
} catch(IOException e){
e.printStackTrace();
}
增强的StreamAPI
takeWhile()的使用
- 返回从开头开始的按照指定规则的尽量多的元素
1 | List<Integer> list = Arrays.asList(23, 43, 23, 5, 123, 23, 1); |
- dropWhile的行为与takeWhile相反,返回剩余的元素
ofNullable()的使用
- 允许我们创建一个单元素Stream,可以包含一个非空元素,也可以创建一个空Stream
iterate()重载的使用
- 提供一个Predicate(判断条件)来指定什么时候结束迭代
1 | Stream.iterate(0, x -> x < 100, x -> x + 1).limit(10).forEach(System.out::println); |
Optional类中stream()的使用
- Optional类也可以使用stream()
Javascrip引擎升级:Nashorn
Java 10 新特性
局部变量类型推断
- 声明变量时,根据所附的值,推断变量的类型
1 | var num = 10; |
局部变量不赋值,就不能实现类型推断
Lambda表达式中不能使用类型推断
方法引用中不能使用类型推断
数组的静态初始化中,有些情况不能使用类型推断
以下情况也不能使用类型推断
没有初始化的局部变量声明
方法的返回类型
方法的参数类型
构造器的参数类型
属性
catch块
集合新增创建不可变集合的方法
- copeOf():创建一个只读的集合
Java 11 新特性
新增了一系列字符串的处理方法
- isBlank(): 判断字符串是否为空白
- strip():去除首尾空白
- stripTrailing():去除尾部空白
- stripLeading():去除首部空白
- repeat(int num):复制字符串
- lines().count():行数统计
Optional加强
- boolean isEmpty():判断value是否为空
- T ofElse Throw():value非空,返回value;否则抛异常
- Stream
stream():value非空,返回仅包含此value的Stream,否则返回一个空的Stream
局部变量类型推断的升级
- 可以在var上添加注解
1 | Consumer<String> con1 = ( var t) -> System.out.println(t.toUpperCase()); |
全新的HTTP客户端API
- HttpClient 替代HttpURLConnection
更简化的编译运行程序
之前要运行一个Java源代码必须先编译再运行,现在通过一个Java命令就直接搞定了:
java Javastack.java
废弃Nashorn引擎
ZGC
GC垃圾回收是java主要优势之一
ZGC是一个并发,基于region,压缩型的垃圾收集器,只有root扫描阶段会STW(stop the world)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 adomais's blog!
评论




