Java9新特性系列(JShell)

史培培發表於2018-02-20

題圖:by pixel2013 From pixabay

JShell是什麼?

引入JDK官方的Summary

Provide an interactive tool to evaluate declarations, statements, and expressions of the Java programming language, together with an API so that other applications can leverage this functionality.

  • JShell是Java的REPL工具(Read-eval-print-loop):互動式解析器,一種命令列工具。它允許你無需使用類或者方法包裝來執行Java語句。

  • 像Python和Scala之類的語言早就有互動式程式設計環境REPL了,以互動式的方式對語句和表示式進行求值。開發者只需要輸入一些程式碼,就可以在編譯前獲得對程式的反饋。而之前的Java版本要想執行程式碼,必須建立檔案、宣告類、提供測試方法方可實現。

JShell的理念

即寫即得,快速執行

JShell的目標

  • Java9中終於擁有了REPL工具:jShell。利用jShell在沒有建立類 的情況下直接宣告變數,計算表示式,執行語句。即開發時可以 在命令列裡直接執行java的程式碼,而無需建立Java檔案,無需跟 人解釋”public static void main(String[] args)”這句廢話。
  • jShell也可以從檔案中載入語句或者將語句儲存到檔案中。
  • jShell也可以是tab鍵進行自動補全和自動新增分號。

JShell使用舉例

  • 進入JShell:

    進入shell

  • 幫助:

    幫助

  • 基本使用:

    基本使用

  • Java表示式 JShell終端還可以自己計算Java表示式。字串連線、方法回撥、演算法,諸如此類

    Java表示式

  • 分號對於純語句是可選的:

    分號對於純語句可選

  • 匯入指定的包

    匯入指定的包

  • 向前引用 你在定義方法時可以引用其他方法或變數,且這些方法或變數僅會在一段時間後被定義

  • Tab鍵自動補全程式碼

    Tab鍵自動補全程式碼

  • REPL網路 使用JShell時,我們不會受限於機器和網路訪問,這帶來了一些有趣的機會。例如,想想把它當做一個終端來與伺服器交流,遠端連線到伺服器並且從外面控制一些引數。另一個選擇是查詢資料庫,這裡真的是有無限可能。

    REPL網路

  • 儲存和載入工作空間

    • 列出當前session中所有有效的程式碼片段

      程式碼片段

    • 列出當前session中所有建立過的變數

      建立過的變數

    • 列出當前session中所有建立過的方法

      建立過的方法

  • 使用外部編輯器來編寫java程式碼

/edit add
複製程式碼
  • 從外部檔案載入原始碼
/open xxx.java
複製程式碼
  • 沒有受檢異常/編譯時異常
    沒有受檢異常

如果你一直擔心受檢異常會毀掉你的REPL經歷,無需再擔心,JShell在後臺為你隱藏好了

  • 退出shell
/exit
複製程式碼
  • JShell API

JShell除了可以作為單獨的JDK工具,還可以提供一個API,它能對外部呼叫開放所有的功能

  • 在執行中修改定義

你可以重新宣告變數、方法或者類,而無需擔心原始的宣告。一旦你這樣操作了,就會收到一個資訊提示你發生了什麼,但除此之外一切照舊。

怎麼樣?是不是心動了?趕緊試試吧~

Java9新特性系列(JShell)

微信公眾號:碼上論劍
請關注我的個人技術微信公眾號,訂閱更多內容

相關文章