java9新特性
2022/2/28 1:23:43
本文主要是介绍java9新特性,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1. 目录结构
jdk8及以前的jdk版本,目录结构及含义如下:
jdk9及之后的jdk版本,目录结构及含义如下:
2. JShell工具
相当于cmd工具,直接写方法等等,可以做一些简单的运算和写一些方法:
3. 模块化
jdk8:当一个项目运行时,会带动所有的模块,这对于jvm来说在内存和性能上很低。
jdk9:某一个模块运行的时候,jvm只会启动和它有依赖的模块,并不会加载所有的模块到内存中,性能得以提高。
在这个两个模块java9Demo和java9Test中,java9demo编写一个实体类Person,在java9Test调用这样一个过程:
java9Demo将java8Test模块需要的文件导出,exports把它所在的包导出
module java8Demo { exports com.mdxl.layer_cj.entity; }
然后再java9Test模块中创建一个package-info.java,引入java9Demo模块导出包名
module java9Test { requires java9Demo; }
这样就可以直接在java9Test中引入Person实体类了,这是一个简单的例子。
exports控制着那些包可以被模块访问,所以不被导出的包不能被其他模块访问。
4. 多版本兼容Jar包
好多公司用的jdk大部分还是老版本,jdk6,7都有,他们不敢升级主要是因为兼容的问题,
但是java9做到了这一点,不管公司的项目用的是java6,7,8甚至5,他都可以兼容不出错。
5. 接口Interface的升级
// java 7 及以前特性 全局常量和抽象方法 public static final String a = "22"; boolean process(T t); // java 8 特性 静态方法和默认方法 default void love() { System.out.println("java8 特性默认方法"); } static void haha() { System.out.println("java8 特性静态方法") } // java 9 特性 支持私有方法 private void java9() {}
6. 操作符的升级
// java6及以前 Map<String, String> map7 = new HashMap<String, String>(); // java7和8 <>没有了数据类型 Map<String, String> map7 = new HashMap<>(); // java9添加了匿名内部类的功能,后面添加了大括号{} 可以做一些细节的操作 Map<String, String> map7 = new HashMap<>() {};
7.异常处理try升级
首先看下jdk6,7,8,9的try catch的比较:
java6处理方式:
java7,8处理方式:
java9处理方式:
8. 特殊标识符增加限制
java8之前String _ = "hello";这样的标识可以用,java9就用不到。
9. String底层存储结构更换(StringBuffer,StringBuilder同)
java8之前String的底层结构类型都是char[],但是java9就替换成byte[]这样来讲,更节省了空间和提高了性能。
原因: 之前一直是最小单位是一个char,用到两个byte,但是java8是基于latin1的,而这个latin1编码可以用一个byte标识,就多出了一个byte的空间。
而现在的java9是基于ISO/latin1/Utf-16,latin1和ISO用一个byte标识,UTF-16用两个byte标识,java9会自动识别用哪个编码,
当数据用到1byte,就会使用ISO或latin1;当空间数据满足2byte时,自动使用utf-16,节省了很多空间。
10. Stream API新方法的添加
在原有的Stream API新添加了4个方法,takeWhile、dropWhile、ofNullable、iterate(新重载方法)
1. takeWhile,当达到一定条件就结束:输出结果为45、43,如:
List<Integer> list = Arrays.asList(45, 43, 66); list.stream().takeWhile(x -> x < 50).forEach(System.out::println);
2. dropWhile 与takeWhile相反
3. ofNullable
在java8中Stream中的元素不能完全为null,否则空指针异常;
而在java9的升级中,允许创建null
4. iterate:不加条件无限循环:
java8及之前的控制终止方式: Stream.iterate(1, i -> i + 1).limit(10).forEach(System.out::println) java8及之前的控制终止方式: Stream.iterate(1, i -> i < 100, i -> i + 1).forEach(System.out::println)
5. 引进HttpClient
以往我们都是通过maven添加httpclient ,java9直接引入即可
Java9所有特性都是为了提高性能和内存。
这篇关于java9新特性的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-25Java语音识别项目入门:新手必读指南
- 2024-11-25Java语音识别项目入门:轻松开始你的第一个语音识别项目
- 2024-11-25Java语音识别项目入门详解
- 2024-11-25Java语音识别项目教程:从零开始的详细指南
- 2024-11-25JAVA语音识别项目教程:初学者指南
- 2024-11-25Java语音识别项目教程:初学者指南
- 2024-11-25JAVA云原生入门:新手指南与基础教程
- 2024-11-25Java云原生入门:从零开始的全面指南
- 2024-11-25Java云原生入门:新手必读教程
- 2024-11-25JAVA云原生教程:新手入门及实战指南