摘要:什么是項(xiàng)目是第一個(gè)官方的的縮寫,即交互式編程環(huán)境,是一種命令行工具。它允許你無(wú)需編寫類或者方法來(lái)執(zhí)行語(yǔ)句。它與的解釋器或其它本地支持的語(yǔ)言,如和類似。在即將到來(lái)的的特性中,這絕對(duì)是更有趣的特性之一。
什么是JShell?
JShell/Kulla項(xiàng)目是第一個(gè)官方的Java REPL (Read-Eval-Print-Loop的縮寫,即交互式編程環(huán)境),是一種命令行工具。它允許你無(wú)需編寫類或者方法來(lái)執(zhí)行Java語(yǔ)句。它與Python的解釋器或其它本地支持REPL的JVM語(yǔ)言,如Scala和Groovy類似。在Java 9即將到來(lái)的的特性中,這絕對(duì)是更有趣的特性之一。
JShell的使用 命令行中直接使用下載安裝OpenJDK9,然后我們就可以在安裝目錄的bin文件夾下看到 jshell.exe ,如果你配置好了環(huán)境變量,那么就可以在命令行中使用了。
我們來(lái)看下Jshell可以有什么設(shè)置選項(xiàng): /list:用于查看你之前輸入的語(yǔ)句的信息 /vars:用于查看你之前輸入的變量,如果你只是輸入了一個(gè)表達(dá)式,Jshell會(huì)將計(jì)算結(jié)果保存為一個(gè)變量我們并沒(méi)有聲明$1變量,但是Jshell默認(rèn)將表達(dá)式的結(jié)果轉(zhuǎn)為變量進(jìn)行了存儲(chǔ),所以我們可以直接使用改變量:
/save:存儲(chǔ)之前的輸入我們執(zhí)行:
會(huì)將文件存儲(chǔ)到你的用戶文件目錄下(你也可以指定完整的路徑)
我們來(lái)看看存儲(chǔ)的文件的內(nèi)容:
1+1 1+1 2+2 $1 System.out.print($1)
其實(shí)就是簡(jiǎn)單將你的輸入進(jìn)行了保存
/reset:重置,會(huì)清楚你之前輸入的內(nèi)容 /open:打開一個(gè)文件并執(zhí)行其中內(nèi)容 /methods:獲取聲明的或者使用到靜態(tài)方法 /types:顯示接口、類、枚舉等信息 /imports:獲取導(dǎo)入的包上面的包都是默認(rèn)導(dǎo)入的包這樣我們就能直接使用這些包中的類而無(wú)需自己聲明
/exit:退出Jshell /reload:重置后重新加載之前的內(nèi)容 /classpathJDK9將Jshell相關(guān)API封裝為模塊(模塊相關(guān)知識(shí)可以查看 模塊化簡(jiǎn)單教程)方便使用。下面我們通過(guò)代碼來(lái)學(xué)習(xí)一下相關(guān)的API:
package com.coderknock; import java.io.ByteArrayInputStream; import java.io.Console; import java.util.List; import jdk.jshell.*; import jdk.jshell.Snippet.Status; /** * 拿客 * www.coderknock.com * QQ群:213732117 * 創(chuàng)建時(shí)間:2016年06月29日 * 描述:JShell */ public class JshellMain { public static void main(String[] args) { Console console = System.console(); //創(chuàng)建一個(gè)Jshell環(huán)境,之后會(huì)自動(dòng)進(jìn)行關(guān)閉 try (JShell js = JShell.create()) { //循環(huán)監(jiān)聽輸出 do { System.out.print("請(qǐng)輸入一些Java代碼: "); String input = console.readLine(); if (input == null) { break; } //將輸入的指令轉(zhuǎn)化為SnippetEvent對(duì)象 Listevents = js.eval(input); for (SnippetEvent e : events) { StringBuilder sb = new StringBuilder(); if (e.causeSnippet() == null) { // 我們有一個(gè)片段創(chuàng)建的事件 switch (e.status()) {//根據(jù)代碼片段的執(zhí)行進(jìn)行輸出 case VALID: sb.append("Successful "); break; case RECOVERABLE_DEFINED: sb.append("With unresolved references "); break; case RECOVERABLE_NOT_DEFINED: sb.append("Possibly reparable, failed "); break; case REJECTED: sb.append("Failed "); break; } if (e.previousStatus() == Status.NONEXISTENT) { sb.append("addition"); } else { sb.append("modification"); } sb.append(" of "); sb.append(e.snippet().source()); System.out.println(sb); if (e.value() != null) { System.out.printf("Value is: %s ", e.value()); } System.out.flush(); } } } while (true); } System.out.println(" Goodbye"); } }
進(jìn)行編譯javac JshellMain.java -encoding UTF-8
運(yùn)行結(jié)果:
當(dāng)輸入錯(cuò)誤的java代碼時(shí):
執(zhí)行for循環(huán)等:
本人的直播課程在 7 月份就要開始了,希望小伙伴們支持一下,現(xiàn)在報(bào)名有優(yōu)惠噢
https://segmentfault.com/l/15...
https://segmentfault.com/l/15...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/67217.html
摘要:新特性概述系列一安裝及使用系列二運(yùn)行系列三模塊系統(tǒng)精要系列四更新系列五系列六系列七系列八系列九與的區(qū)別遷移注意事項(xiàng)參數(shù)遷移相關(guān)選項(xiàng)解析使用構(gòu)建實(shí)例使用示例帶你提前了解中的新特性 Java語(yǔ)言特性系列 Java5的新特性 Java6的新特性 Java7的新特性 Java8的新特性 Java9的新特性 Java10的新特性 Java11的新特性 Java12的新特性 Java13的新特性...
摘要:在語(yǔ)言上并沒(méi)有添加太多的新特性,但在使用性能上做了很改進(jìn)。二多版本包支持即在不同版本下,執(zhí)行相應(yīng)版本的代碼。在發(fā)布新版本的后,用戶可能不會(huì)升級(jí)到新環(huán)境,但是項(xiàng)目可能會(huì)開始逐步升級(jí)到新版本,來(lái)提前適應(yīng)即將到來(lái)的環(huán)境。 Java9在語(yǔ)言上并沒(méi)有添加太多的新特性,但在使用、性能上做了很改進(jìn)。 一、模塊間引用 Java9添加了模塊化的概念,使得之前的控制訪問(wèn)權(quán)限有了改變。 之前: publ...
摘要:序本文介紹下下面的版本安裝使用。下載官網(wǎng)地址安裝路徑下載襲來(lái)是個(gè)文件,雙擊安裝,默認(rèn)裝到了這里,的地址是看下版本歡迎使用版本要大致了解該版本請(qǐng)鍵入有了就可以快速做一些驗(yàn)證,比如查看導(dǎo)入的類庫(kù)方法定義及調(diào)用已創(chuàng)建方法已修改方法查看歷史 序 本文介紹下mac下面的java9版本安裝使用。 下載 官網(wǎng)地址http://www.oracle.com/technet... 安裝路徑 下載襲來(lái)是個(gè)...
摘要:序本文介紹下如何在運(yùn)行鏡像啟動(dòng)然后就可以正常使用了,比如退出查看此鏡像的版本 序 本文介紹下如何在docker運(yùn)行java9 鏡像 docker pull openjdk:9-jdk 啟動(dòng) docker run -it openjdk:9-jdk /bin/jshell 然后就可以正常使用jshell了,比如 Sep 22, 2017 2:16:12 AM java.util.pref...
摘要:來(lái)來(lái)來(lái),花分鐘看看的七大新特性,還有代碼樣例。本地是指方法內(nèi)的變量聲明。從開始,這個(gè)正式進(jìn)入標(biāo)準(zhǔn)庫(kù)包。同步請(qǐng)求會(huì)阻止當(dāng)前線程??上驳氖牵绻麌L試改變不可變集合,會(huì)通過(guò)發(fā)出警告是在中引入的,增加了三個(gè)新方法。 現(xiàn)在Java有多元化的發(fā)展趨勢(shì),既有JS又有C++還有C#的影子,不學(xué)習(xí)那是不行滴。來(lái)來(lái)來(lái),花5分鐘看看Java9-Java11的七大新特性,還有代碼樣例。Java11 發(fā)布了,然...
閱讀 2670·2021-11-23 09:51
閱讀 1656·2021-11-22 13:54
閱讀 2792·2021-11-18 10:02
閱讀 952·2021-08-16 10:57
閱讀 3566·2021-08-03 14:03
閱讀 1882·2019-08-30 15:54
閱讀 3536·2019-08-23 14:39
閱讀 608·2019-08-23 14:26