1. 程式人生 > >Java9新特性之——JShell

Java9新特性之——JShell

java9已經在北京時間9月22日正式釋出,開發者可以在oracle jdk官網上下載到最新的jdk9。jdk9和jdk8中的新特性不同:jdk8中的stream和lambda表示式能夠讓開發者非常快速和直觀地感受到新版本的功能特性,而java9中的關鍵更新——模組化,相比而言不能讓開發者有直觀的感受。

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: