ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java9新特性

2022-02-27 23:03:10  阅读:203  来源: 互联网

标签:java9Test 特性 模块 println byte java9 java8


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有