jdk8及以前的jdk版本,目录结构及含义如下:
jdk9及之后的jdk版本,目录结构及含义如下:
相当于cmd工具,直接写方法等等,可以做一些简单的运算和写一些方法:
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控制着那些包可以被模块访问,所以不被导出的包不能被其他模块访问。
好多公司用的jdk大部分还是老版本,jdk6,7都有,他们不敢升级主要是因为兼容的问题,
但是java9做到了这一点,不管公司的项目用的是java6,7,8甚至5,他都可以兼容不出错。
// 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() {}
// java6及以前 Map<String, String> map7 = new HashMap<String, String>(); // java7和8 <>没有了数据类型 Map<String, String> map7 = new HashMap<>(); // java9添加了匿名内部类的功能,后面添加了大括号{} 可以做一些细节的操作 Map<String, String> map7 = new HashMap<>() {};
首先看下jdk6,7,8,9的try catch的比较:
java6处理方式:
java7,8处理方式:
java9处理方式:
java8之前String _ = "hello";这样的标识可以用,java9就用不到。
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,节省了很多空间。
在原有的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所有特性都是为了提高性能和内存。