• Java9新特性之——JShell


     

    java9已经在北京时间9月22日正式发布,开发者可以在oracle jdk官网上下载到最新的jdk9。jdk9和jdk8中的新特性不同:jdk8中的stream和lambda表达式能够让开发者非常快速和直观地感受到新版本的功能特性,而java9中的关键更新——模块化,相比而言不能让开发者有直观的感受。

    今天首先带来的是java9中直观的新特性:JShell。关于更多jdk9特性的介绍可以参照infoq的一篇文章:https://mp.weixin.qq.com/s/Onj9ZJYbV5pLTAPcYBJREA

    更多JDK9中的新特性说明,请参照:https://docs.oracle.com/javase/9/whatsnew/toc.htm#JSNEW-GUID-C23AFD78-C777-460B-8ACE-58BE5EA681F6

    JShell目标

    JShell的目标是提供一个交互工具,通过它来运行和计算java中的表达式。开发者可以轻松地与JShell交互,其中包括:编辑历史,tab键代码补全,自动添加分号,可配置的imports和definitions。其他的很多主流编程语言如python都已经提供了console,便于编写一些简单的代码用于测试。值得一提的是,JShell并不是提供了新的一个交互语言,在JShell中编写的所有代码都必须符合java语言规范;图形界面和调试支持也没有,JShell的一个目标是可以在IDE中使用JShell交互,而不是实现IDE实现的功能。

    每一门编程语言的第一个练习就是打印“Hello,World”,有了JShell之后,Java开发者终于不用先编写一个类,再编写“奇怪的”main方法,相信对于初学者来说是一个福音。

    JShell的使用

    安装jdk9并配置环境变量后,就可以在控制台中使用JShell了,JShell在Java安装目录的/bin目录下:

    更多的命令可以使用/help来查看,例如:

    /exit:退出JShell

    /list:查看已经输出的表达式

    值得一提的是:使用tab键激活代码提示,再次使用tab键查看函数的文档,不必在表达式的结尾使用";",JShell会自动给表达式添加分号。

    JShell说明

    功能

    输入的代码作为代码片段(snippets),代码片段需要符合java语法规则:

    • Expression

    • Statement

    • ClassDeclaration

    • InterfaceDeclaration

    • MethodDeclaration

    • FieldDeclaration

    • ImportDeclaration

    例如,可以再JShell中初始化变量:

    
    
    int a = 42;

    也可以定义类:

    public class C{
      public void fun(){
        System.out.println("function");
      }
    }

    规则

    所有的代码片段(如类定义、方法定义)都有一个名称与之关联,并且别的代码块可以通过这个名称来引用它。定义的代码片段遵循以下规则:

    • 访问控制修饰(private/protected/public)将被忽略。所有定义的代码片段都能被其他的代码片段访问。

    • final修饰符被忽略。

    • static修饰符被忽略,因为没有用户可见的包含静态方法的类,这些包装都由JShell来做。

    • 不允许使用default和synchronized修饰符。

    • abstract修饰符仅仅允许用于修饰类。

    很多代码片段都包含嵌套定义,例如在类中定义成员变量和成员方法。在成员函数中定义的函数使用的访问控制符是有效的。也就是说 ,如果在类C中定义方法private void fun(),在别的代码片段中是无法通过new C().fun()来访问的。

    前向引用(Forward reference)

    在Java的类中,可以会使用后续代码中定义的方法,这在JShell中也是可以的(举例来说,可以再方法a()中调用后面定义的方法b())。但是变量的初始化不支持前向引用。

    模块化环境配置

    模块化环境可以配置和直接添加到编译和运行选项中。编译选项使用-C,运行选项使用-R。关于Jigsaw和模块化相关的新特性,后续再来细说。

    总结

    JShell提供了一个控制台交互界面,通过这个交互界面,开发者可以快速编写代码片段并运行,可以查看类库的文档,可以编写简单的程序。在需要快速验证的场景,我们不再需要先定义类、再定义方法、再定义main()方法或单元测试来验证我们的想法;对于java初学者来说,这也提供了一个简便的方法来学习java,是一个简单而又实用的特性。

    JShell相关文档

    The JShell module API Specifications can found here:

    Which includes the primary JShell API (jdk.jshell package) Specification:

    The jshell tool reference:

    is part of the Java Platform, Standard Edition Tools Reference:

  • 相关阅读:
    std::exception标准和各平台实现的不同
    学习Linux必备的硬件基础一网打尽
    Git安装及SSH Key管理之Windows篇
    简要介绍一下Dos/Windows格式文件和Unix/Linux格式文件(剪不断理还乱的 和 )
    C/C++中的序列点
    STL容器之vector 的下标越界是否报错
    二维数组与指针的联系与区别
    C/C++ strlen函数为什么不能传入空指针NULL?
    棋盘游戏
    Knight Moves
  • 原文地址:https://www.cnblogs.com/kode/p/7581943.html
Copyright © 2020-2023  润新知