目录结构
JDK8
JDK9
模块化系统
本质上讲也就是说,用模块来管理各个package,
通过声明某个package 暴露,模块(module)的概念,其实就是package外再裹一层,不声明默认就是隐藏。
因此,模块化使得代码组织上更安全,因为它可以指定哪些部分可以暴露,哪些部分隐藏。
jShell命令
jShell,让Java可以像脚本语言一样运行,从控制台启动jShell,利用jShell在没有创建类的情况下直接声明变量,计算表达式, 执行语句。
即开发时可以在命令行里直接运行Java的代码,而无需创建Java文件,无需跟人解释”public static void main(String[] args)”这句废话。
语法改进
接口中的私有方法
Java 8中规定接口中的方法除了抽象方法之外,还可以定义静态方法和默认方法。一定程度上,扩展了接口的功能,此时的接口更像是一个抽象类。
在Java 9中,接口更加的灵活和强大,连方法的访问权限修饰符都可以声明为private的了,此时方法将不会成为你对外暴露的API的一部分。
interface MyInterface {
void normalInterfaceMethod();
default void methodDefault1() {
init();
}
public default void methodDefault2() {
init();
}
// This method is not part of the public API exposed by MyInterface
private void init() {
System.out.println("默认方法中的通用操作");
}
}
class MyInterfaceImpl implements MyInterface {
@Override
public void normalInterfaceMethod() {
System.out.println("实现接口的方法");
}
}
public class MyInterfaceTest {
public static void main(String[] args) {
MyInterfaceImpl impl = new MyInterfaceImpl();
impl.methodDefault1();
// impl.init();//不能调用
}
}
钻石操作符
try语句
String存储结构变更
String的底层从char型数组改成byte数组来存储
(用char型来存储每个字符使用两个字节来存,但我们所写的大部分字符都只占一个字节,因此浪费一个字节的空间)
(在String内部还添加了编码标识符,用于判断存储的是Latin-1还是UTF-16,前者只占一个字节,后者占两个字节,会动态判断)
快速创建只读集合
调用集合中静态方法 of( ),不管是哪个接口定义的都可以直接调用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WlNEKk4q-1629287424640)(C:\Users\acer\AppData\Roaming\Typora\typora-user-images\image-20210817204630045.png)]
此时得到的集合,是不可变的:在创建后,继续添加元素到这些集合会导致 **“UnsupportedOperationException” **。
InputStream加强
transferTo,可以用来将数据直接传输到 OutputStream
新的StreamAPI方法