
最明显的变化是“去除了”jre目录,实际上jre任然可以被我们手动生成,但由于目录的重新划分,使得jre并不被实质性的需要

本质上讲,模块(module)的概念,其实就是package外再裹一层,也就是说,用模块来管理各个package,通过声明某个package暴露,不声明默认就是隐藏。因此,模块化使得代码组织上更安全,因为它可以指定哪些部分可以暴露,哪些部分隐藏。

package cn.example.bean;
/**
* @author Syf200208161018
* @date 2022/8/24 2:41
*/
public class Stu {
private String name;
private int age;
public Stu() {
}
public Stu(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Stu{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
注意:要在src目录下建立module-info.java
module demo2 {
//将包进行暴露,来提供给其他项目使用
exports cn.example.bean;
}
module demo1 {
//引入使用demo2
requires demo2;
}
package cn.example.java;
import cn.example.bean.Stu;
/**
* @author Syf200208161018
* @date 2022/8/24 2:41
*/
public class Test {
public static void main(String[] args) {
final Stu stu = new Stu("zhangsan",16);
System.out.println(stu);
}
}

暴露的包名和引入使用的包名不能一样,否则报错
如:我在demo1中的包已经叫cn.example.java,若demo2中包也叫cn.example.java,则会导致报出程序包已存在另一个模块中的错误


Java 9中终于拥有了REPL工具: jShell。让Java可以像脚本语言一样运行,从控制台启动jShell,利用jShell在没有创建类的情况下直接声明变量,计算表达式执行语句。即开发时可以在命令行里直接运行Java的代码,而无需创建Java文件,无需跟人解释”public static void main(String[] args)”这句废话
jShell也可以从文件中加载语句或者将语句保存到文件中
jShell也可以是tab键进行自动补全和自动添加分号
打开cmd窗口输入jshell(前提是你已经配置好了系统环境)
例如你可以像下面一样写,当然你可以直接使用tab键进行快捷提示

/help
使用该命令可以快速查看一些功能

/edit
使用该命令可以快速唤起编辑窗口进行编辑

在Java 9中,接口更加的灵活和强大,连方法的访问权限修饰符都可以声明为private的了,此时方法将不会成为你对外暴露的API的一部分。
默认接口中的声明关键字就是:public
现在加入了private使得我们可以更加方便灵活,安全的操纵接口
因为即使是之前的default关键字但仅是让接口有了方法体,但访问修饰符任然是public
这个作为了解就行