jshell
JEP 222: Java 命令行工具
可以像js的console控制台一样实现命令行交互工具。可以在jshell中直接输入输入表达式并看到其结果。
降低了输出"hello world"的难度。
不需要以往的新建java文件,再写main方法,再编译的过程。并且在jshell中,这些包是默认导入的,可以直接使用其中的方法
import java.lang.*;
import java.io.*;
import java.math.*;
import java.net.*;
import java.nio.file.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.function.*;
import java.util.prefs.*;
import java.util.regex.*;
import java.util.stream.*;
可以通过jshell
命令,进入jshell环境,/exit
退出环境
模块化系统
Java9以前,项目内的结构:package -> class/interface
Java9以后,项目内结构:moudle -> package/interface
在引入模块系统之后,jdk被分成了94个模块,模块化的好处在于可以通过关键词exports
精准控制那些类可以被对外使用,哪些类只能内在使用。其中有exports
,exports…to
,open
,opens
关键字
module my.module {
//exports 公开指定包的所有公共成员
exports com.test.package.my;
}
module my.module {
//exports…to 限制访问的成员范围
export com.test.package.my to com.specific.package;
}
open module my.module {
//requires 导入包
requires com.test.package.my;
}
module my.module {
//opens 用来指定开放的包,其中public类型是可以直接访问的,其他类型可以通过反射得到。
opens <package>;
}
G1垃圾回收器成默认
由Java8的Parallel Scavenge
(新生代)+Parallel Old
(老年代)变成了G1
(Garbage-First Garbage Collector)
接口私有方法
Java9里针对interface提供了私有方法,通过private
声明一个方法,可以让接口拥有抽象类的特质。