java 9的新特性解读(2)

举报
yd_249383650 发表于 2023/03/12 12:42:18 2023/03/12
【摘要】 ​ ​编辑前言 经过4次跳票,历经曲折的Java 9 终于终于在2017年9月21日发布。 从Java 9 这个版本开始,Java 的计划发布周期是 6 个月,下一个 Java 的主版本将于 2018 年 3 月发布,命名为 Java 18.3,紧接着再过六个月将发布 Java18.9。 这意味着Java的更新从传统的以特性驱动的发布周期,转变为以时间驱动的 (6 个月为周期)发布模式...

 编辑


前言

 经过4次跳票,历经曲折的Java 9 终于终于在2017年9月21日发布。

 从Java 9 这个版本开始,Java 的计划发布周期是 6 个月,下一个 Java 的主版本将于 2018 年 3 月发布,命名为 Java 18.3,紧接着再过六个月将发布 Java18.9。

 这意味着Java的更新从传统的以特性驱动的发布周期,转变为以时间驱动的 (6 个月为周期)发布模式,并逐步的将 Oracle JDK 原商业特性进行开源。

 针对企业客户的需求,Oracle 将以三年为周期发布长期支持版本(longtermsupport)。

 Java 9 提供了超过150项新功能特性,包括备受期待的模块化系统、可交互 的 REPL 工具:jshell,JDK 编译工具,Java 公共 API 和私有代码,以及安全增强、扩展提升、性能管理改善等。可以说Java 9是一个庞大的系统工程,完全做了一个整体改变。


Java的REPL工具: jShell命令

产生背景

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

设计理念

即写即得、快速运行

实现目标

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

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

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

调出jShell  

编辑


获取帮助 

编辑

基本使用 

编辑

编辑

导入指定的包  

编辑

默认已经导入如下的所有包:(包含java.lang包)  :

编辑

Tips:在 JShell 环境下,语句末尾的“;” 是可 选的。但推荐还是最好加上。提高代码可读 性。 

查看当前 session 下所有创建过的变量  

编辑

查看当前 session 下所有创建过的方法  

编辑

Tips:我们还可以重新定义相同方法名和参数列表的方法,即为对现有方法的修改(或覆盖)。

使用外部代码编辑器来编写 Java 代码 

编辑

 只需按下 Tab 键,就能自动补全代码

编辑

列出当前 session 里所有有效的代码片段 

编辑

使用/open命令调用: 

编辑

没有受检异常(编译时异常) 

 编辑

 说明:本来应该强迫我们捕获一个IOException,但却没有出现。因为jShell在 后台为我们隐藏了。

 退出jShell

编辑

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

Java 8中规定接口中的方法除了抽象方法之外,还可以定义静态方法 和默认的方法。一定程度上,扩展了接口的功能,此时的接口更像是 一个抽象类。 在Java 9中,接口更加的灵活和强大,连方法的访问权限修饰符都可 以声明为private的了,此时方法将不会成为你对外暴露的API的一部分。

 编辑


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();//不能调用

    }
}

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

我们将能够与匿名实现类共同使用钻石操作符(diamond operator)在Java 8中如下的操作是会报错的:

    Comparator<Object> com = new Comparator<>(){

        @Override

        public int compare(Object o1, Object o2) {

            return 0;

        }

    };

编译报错信息:Cannot use “<>” with anonymous inner classes.  

Java 9中如下操作可以正常执行通过:

// anonymous classes can now use type inference

    Comparator<Object> com = new Comparator<>(){

        @Override

        public int compare(Object o1, Object o2) {

            return 0;

        }

    };


【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。