Java9、10、11新特性

一、Java9中的新特性

1.1 JDK和JRE目录结构的改变

在这里插入图片描述在这里插入图片描述

1.2 模块化系统

模块之间包的调用

现有两个模块,结构如下
在这里插入图片描述

现在希望在第一个块的MoudleTest中使用第二个模块中的Person类,直接使用是不行的,使用需要引入暴露和导入的概念
如图:
首先在第二个模块中的src下。新建 moudle-info.java文件
并指明向外暴露的包
在这里插入图片描述

module java9test {
   
    exports guigu.moudletest20210918;
}

然后再需要引用的模块的src下同样新建 moudle-info.java文件
指明需要引入的模块
在这里插入图片描述

module guigu20210918 {
   
    requires java9test;
}

1.3 Java的REPL工具

1.3.1 jShell命令

产生背景

向Python 和Scala之类的语言早就有交互式编程环境(read - evaluate - print - loop)了,以交互式的方式对语句和表达式进行求值。开发者只需要输入一些代码,就可以在编译前获得对程序的反馈。而之前Java版本想执行代码,必须创建文件、声明类、提供测试方法方可实现

设计理念

即写即得

实现目标
  • Java 9中拥有的jShell。可以让Java可以像脚本语言一样运行,从控制台启动jShell,利用jShell可以在没有声明类的情况下直接声明变量,计算表达式,执行语句。即开发时可以在命令行里直接运行java代码,而无需创建Java文件。
  • jShell也可以从文件中加载语句或将语句保存到文件中
  • jShell也可以是tab建进行自动补全和自动添加分号

在命令行直接输入 jshell就可以开始写语句了

在这里插入图片描述

在shell中编写Java代码也会有相应的提示在这里插入图片描述
/edit命令可以调出JShell Edit Pad,可以在窗口看见已经成功的输出
在这里插入图片描述也可以在JShell Edit Pad中进行修改,修改完成后点击Accept按钮提交修改后在shell内会有修改成功的提示
在这里插入图片描述
直接在shell命令内再次定义同名的变量或方法,后建的变量方法会覆盖之前的变量和方法

其他jshell命令
在这里插入图片描述

在这里插入图片描述

1.4 语法改进:接口的私有方法

Java 9 中,接口中可以定义访问权限为private的方法。
在这里插入图片描述
在这里插入图片描述

1.5 语法改进:钻石操作符使用升级

在Java8中与匿名实现类共同使用钻石操作符(diamond operator)是会报错的
编译报错信息:Cannot use '<>' with anonymous inner classes.

    Comparator<Object> com = new Comparator<>() {
   
        @Override
        public int compare(Object o1, Object o2) {
   
            return 0;
        }
    };

1.6 try结构的语法升级

Java8中try的资源关闭是自动的

java8自动关闭的前提要求,执行后必须关闭的资源的初始化必须在try子句中初始化

        //java8之前的资源关闭都是在finally中完成
        //Java8当中资源关闭操作是自动实现的
        try(InputStreamReader reader = new InputStreamReader(System.in)) {
   

            char[] cbuf = new char[20];
            int len;
            while ((len = reader.read(cbuf))!= -1){
   
                String s = new String(cbuf, 0, len);
                System.out.println(s);
            }

        } catch (IOException e) {
   
            e.printStackTrace();
        }

Java9中try

执行后必须关闭的资源的初始化可以在try子句中之外
此时的reader是声明为final的,在try内部不可修改

        //java9
        InputStreamReader reader = new InputStreamReader(System.in);
        try (reader) {
   
            char[] cbuf = new char[20];
            int len;
            while ((len = reader.read(cbuf)) != -1) {
   
                String s = 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值