• Java9新特性——JDK目录变化,模块化系统,JShell,接口私有方法


    JDK目录变化

    JDK1~8的目录结构

    在这里插入图片描述

    JDK9及以上的目录结构

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

    模块化系统

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

    没有模块化系统产生的问题

    1. Java运行环境的膨胀和臃肿,每次JVM启动的时候,至少会有30~60MB的内存加载,主要原因是JVM需要加载rt.jar,不管其中的类是否被classloader加载,第一步整个jar都会被JVM加载到内存当中去(而模块化可以根据模块的需要加载程序运行需要的class)
    2. 当代码库越来越大,创建复杂,盘根错节的“意大利面条式代码”的几率呈指数级的增长。不同版本的类库交叉依赖导致让人头疼的问题,这些都阻碍了Java开发和运行效率的提升。
    3. 很难真正地对代码进行封装,而系统并没有对不同部分(也就是JAR文件)之间的依赖关系有个明确的概念。每一个公共类都可以被类路径之下任何其它的公共类所访问到,这样就会导致无意中使用了并不想被公开访问的API。

    带来的优化

    1. 模块化的主要目的在于减少内存的开销
    2. 只须必要模块,而非全部jdk模块,可简化各种类库和大型应用的开发和维护
    3. 改进 Java SE平台,使其可以适应不同大小的计算设备
    4. 改进其安全性,可维护性,提高性能

    QuickStart

    1.简单构建如下层级项目(请使用JDK9及以上的版本)

    在这里插入图片描述

    2.编写demo2中的Stu类

    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 +
                    '}';
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    3.demo2中新建module-info.java文件并暴露项目

    注意:要在src目录下建立module-info.java

    module demo2 {
        //将包进行暴露,来提供给其他项目使用
        exports cn.example.bean;
    }
    
    • 1
    • 2
    • 3
    • 4

    4.在demo1中新建module-info.java文件并引入项目

    module demo1 {
    //引入使用demo2
        requires demo2;
    }
    
    • 1
    • 2
    • 3
    • 4

    5.编写Test测试

    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);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

    注意点

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

    在这里插入图片描述

    JShell

    Java 9中终于拥有了REPL工具: jShell。让Java可以像脚本语言一样运行,从控制台启动jShell,利用jShell在没有创建类的情况下直接声明变量,计算表达式执行语句。即开发时可以在命令行里直接运行Java的代码,而无需创建Java文件,无需跟人解释”public static void main(String[] args)”这句废话

    jShell也可以从文件中加载语句或者将语句保存到文件中

    jShell也可以是tab键进行自动补全和自动添加分号

    QuickStart

    打开cmd窗口输入jshell(前提是你已经配置好了系统环境)
    例如你可以像下面一样写,当然你可以直接使用tab键进行快捷提示

    在这里插入图片描述

    快速帮助

    /help
    
    • 1

    使用该命令可以快速查看一些功能
    在这里插入图片描述

    快捷编辑窗口

    /edit
    
    • 1

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

    在这里插入图片描述

    接口私有方法

    在Java 9中,接口更加的灵活和强大,连方法的访问权限修饰符都可以声明为private的了,此时方法将不会成为你对外暴露的API的一部分。

    默认接口中的声明关键字就是:public
    现在加入了private使得我们可以更加方便灵活,安全的操纵接口
    因为即使是之前的default关键字但仅是让接口有了方法体,但访问修饰符任然是public

    这个作为了解就行

  • 相关阅读:
    图书管理系(附源码PPT)
    Windows timeSetEvent定时器
    清水模板是什么材质?
    【论文精读】Robust Alignment for Panoramic Stitching Via an Exact Rank Constraint
    使用java解析hashMap
    看懂这篇文章-你就懂了数据库死锁产生的场景和解决方法
    网络安全(黑客)——自学篇
    智慧物联网医疗,树立可持续性智能化和便利化新标杆
    还能这样操作?勒索软件团伙向监管部门举报受害者!
    HJ86 求最大连续bit数
  • 原文地址:https://blog.csdn.net/qq_51553982/article/details/126496206