编程语言
首页 > 编程语言> > java9新特性

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所有特性都是为了提高性能和内存。

标签:java9Test,特性,模块,println,byte,java9,java8
来源: https://www.cnblogs.com/jsqup/p/15943720.html