java 9的新特性解读(2)

前言

 经过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;

        }

    };

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个风轻云淡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值