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:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM