成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Java9特性預(yù)覽——Jshell

hikui / 1373人閱讀

摘要:什么是項(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)容

/classpath :這個(gè)用于你使用自己聲明的類的時(shí)候可以將目錄添加到classpath進(jìn)行引用 /history:查看之前所有輸入的命令

/retain editor|start|feedback|mode 用于保存配置信息方便 別的環(huán)境中/set editor|start|feedback|mode來(lái)獲得樣的配置 /id:重新執(zhí)行某個(gè)id的操作

/-n:重新運(yùn)行前面的第 n 個(gè)片段

在代碼中的使用

JDK9將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ì)象
                 List events = 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

相關(guān)文章

  • Java9的新特性

    摘要:新特性概述系列一安裝及使用系列二運(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的新特性...

    ddongjian0000 評(píng)論0 收藏0
  • Java 9 新特性

    摘要:在語(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...

    SegmentFault 評(píng)論0 收藏0
  • java9系列(一)安裝及jshell使用

    摘要:序本文介紹下下面的版本安裝使用。下載官網(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è)...

    gaosboy 評(píng)論0 收藏0
  • java9系列(二)docker運(yùn)行java9

    摘要:序本文介紹下如何在運(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...

    Integ 評(píng)論0 收藏0
  • 5分鐘學(xué)會(huì)Java9-Java11的七大新特性

    摘要:來(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ā)布了,然...

    xuhong 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<