jdk9更新内容介绍

1. JDK9更新

JDK9重磅增加了以下功能:

1.1. 模块化,可以将代码进行模块化的组装,需要用到什么模块再引用什么模块.减少了不必要的内存消耗和浪费.

1.2. JShell,添加了和其他的语言(比如Python)一样的交互式命令行页面,再也不必为了打印一段"Hello,World"需要先去新建一个类,然后输入一大段文字了

1.3. JavaDoc支持Html5格式规范,同时支持进行全文搜索

1.4. String内部使用byte数组保存而不是以前的char数组保存

1.5. 垃圾收集器统一采用G1进行收集

具体更多请参阅

jdk9更新内容

2. 语法更新

2.1 支持钻石操作符中操作匿名类


HashMap<String, String> map = new HashMap<>(){
    @Override
    public String put(String key, String value) {
        System.out.println("放入了键为:" + key + "值为:" + value);
        return super.put(key, value);
    }

};

map.put("1", "2");

输出结果:


放入了键为:1值为:2

2.2 支持模块化

在每个模块下,都可以创建module-info.java文件,然后在文件中可以导入其他模块或者是导出包,默认对其他模块而言是不可见的.


module cn {
	requires junit;//导入所需要的包
	exports cn.test;//导出,只能导出包名,而不是具体的类名,导出之后才能被其他模块引用
}

2.3 Collection和Map新增加一个静态方法of,其中Map多了一个ofEntries方法


List<Integer> integerList = List.of(1, 2, 3, 4, 5, 6);
integerList.forEach(System.out::println);

Set<Integer> integerSet = Set.of(1, 2, 3, 4, 5, 6);
integerSet.forEach(System.out::println);

Map<String, String> stringMap = Map.of("1", "2", "3", "4");
stringMap.forEach((k, v) -> System.out.println(k + ":" + v));

Map<String, String> entries = Map.ofEntries(Map.entry("1", "2"), Map.entry("2", "3"));
entries.forEach((k, v) -> System.out.println(k + ":" + v));

注意:创建出来的集合均是不可变更的集合,也就是不能发生任何的元素变更,包括添加,删除,修改等,只能进行获取

2.4 新增加两个Stream方法takeWhiledropWhile


List<Integer> integerList = List.of(1, 2, 3, 4, 5, 6, 1);
integerList.stream().takeWhile(x -> x < 5).forEach(System.out::println);

输出结果:


1
2
3
4

takeWhile表示从头开始找适合此条件的,遇到便输出,如果碰到不合适的条件,则不输出
同理dropWhile则刚好相反

2.5 接口中可定义private私有方法


public interface MyInterface {

	//jdk7之前的版本,默认均为public
	void method1();

	//jdk8允许静态方法和default方法
	static void method2() {
		System.out.println("method2");
	}

	default void method3() {
		System.out.println("method3");
		method4();
	}

	//jdk9允许私有方法
	private void method4() {
		System.out.println("method4");
	}

}

但是如果实现类中有两个同名的default方法,那么子类必须实现同名方法覆盖

2.6 流的改进


BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
try (reader;writer) {
    reader.read();
} catch (IOException e) {
    e.printStackTrace();
}

可以在try中进行自动的关闭流,但是请注意,此时的readerwriter默认都是final的,你无法进行修改.

你可能感兴趣的:(Java)