新聞中心
如何現(xiàn)在開(kāi)始使用Java 9最酷特性之一?

創(chuàng)新互聯(lián)建站是專業(yè)的永吉網(wǎng)站建設(shè)公司,永吉接單;提供成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行永吉網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!
上周我終于抽出時(shí)間親身體驗(yàn)了一個(gè)Java 9 的搶先體驗(yàn)版本。***站就是JShell,它也被稱之為Kulla項(xiàng)目,這就是起初驅(qū)使我鼓起勇氣去嘗試Java9搶先體驗(yàn)版的原因。沒(méi)錯(cuò),官方的 Java 9發(fā)布時(shí)間目前定在2016年9月,但搶先體驗(yàn)版中已經(jīng)有全功能的JShell。
新文章:Java9先睹為快:JShell編程實(shí)踐——#Java REPL http://t.co/F8cQ9X5dQM pic.twitter.com/JoWR6i8PSz
—— Takipi (@takipid) 2015年7月7日
有趣的事實(shí) 1:Kulla項(xiàng)目是JShell研發(fā)團(tuán)隊(duì)的內(nèi)部名字。Kulla是美索不達(dá)米亞神話中的建筑者之神,他在施工結(jié)束后被放逐。這是在暗示Kulla的用例(use case)是一種學(xué)習(xí)工具嗎?
那么到底什么是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ì)是更有趣的特性之一。想了解正在來(lái)到你身邊的JDK的更多有趣特性(Jigsaw項(xiàng)目除外?。┠憧梢蚤喿x早先我們關(guān)于Java 9的5大特性文章,這些特性可以改變你的編碼方式。到現(xiàn)在為止,如果你要在Java中用REPL,你也可以使用替代方案,比如像具有多種語(yǔ)言支持的repl.it或非官方的Java REPL項(xiàng)目。不過(guò)使用Java9,REPL與langtools包一起直接捆綁到了JDK。
有趣的事實(shí) 2:另一個(gè)也有著神話般名字的OpenJDK項(xiàng)目就是Valhalla;其目標(biāo)是超越Java 9,致力于數(shù)值類型和泛型具體化的特性研發(fā)。絕非善類。
廢話少說(shuō),我們把它運(yùn)行起來(lái)看看它能做什么。在下面很短的終端錄制視頻中,我們運(yùn)行JShell v0.61完成一個(gè)快速測(cè)試(在OSX 10.10.3 中存在一個(gè)已知的問(wèn)題,即提示與部分輸出會(huì)混合顯示在一起。無(wú)需在意,后續(xù)會(huì)被盡快修復(fù))。
(譯者注:JShell視頻請(qǐng)參考原文)
回顧一下我們剛剛所看到的:JShell一些最有趣的特性
[8/7/2015] 更新:編輯于Brian Goetz的筆記,他是Oracle的Java架構(gòu)師。
1、分號(hào)對(duì)于純語(yǔ)句是可選的
Hello JShell! 基于REPL快速和靈活的特性,我們可以放松一下,不用在語(yǔ)句結(jié)束地方加分號(hào):Hello JShell!
這里真沒(méi)有分號(hào)哦
實(shí)際上,在我們發(fā)起的一個(gè)關(guān)于未來(lái)Java特性的調(diào)查中,該特性是受多數(shù)人認(rèn)可的。當(dāng)然分號(hào)仍被保留了下來(lái),無(wú)論是作為終結(jié)符還是分隔符。REPL允許一次性鍵入純表達(dá)式和語(yǔ)句,因此分號(hào)對(duì)于JShell終端用例是可選的。
2、REPL網(wǎng)絡(luò)
使用JShell時(shí),我們不會(huì)受限于機(jī)器和網(wǎng)絡(luò)訪問(wèn),這帶來(lái)了一些有趣的機(jī)會(huì)。例如,想想把它當(dāng)做一個(gè)終端來(lái)與服務(wù)器交流,遠(yuǎn)程連接到服務(wù)器并且從外面控制一些參數(shù)。另一個(gè)選擇是查詢數(shù)據(jù)庫(kù),這里真的是有***可能。
用JShell來(lái)獲取一個(gè)HTTP請(qǐng)求header的簡(jiǎn)單例子
3、Help!保存和加載工作空間
除了運(yùn)行和計(jì)算Java語(yǔ)句,JShell支持一系列命令行來(lái)幫助你了解和瀏覽REPL環(huán)境。你可以保存和加載工作空間(這讓Java有點(diǎn)像腳本語(yǔ)言),且全部代碼執(zhí)行完成后可以在命令行提示下返回(此時(shí)你可以在終端視頻中看到我提到過(guò)的OS X bug)。
其它有用的命令行都列出了所有當(dāng)前可以用的變量和方法,顯示出你的所有歷史命令,并且列出了目前為止你寫過(guò)的所有代碼(這個(gè)有時(shí)表現(xiàn)得還是有點(diǎn)奇怪)。
這是當(dāng)前可用的完整命令列表:
JShell /help
4、沒(méi)有受檢異常
如果你一直擔(dān)心受檢異常會(huì)毀掉你的REPL經(jīng)歷——無(wú)需再擔(dān)心,JShell在后臺(tái)為你隱藏好了。在下面的例子中,本應(yīng)當(dāng)強(qiáng)迫我們捕獲一個(gè)IOException,卻沒(méi)有出現(xiàn)。下面的例子是我們?cè)谧x取和打印一個(gè)文件,不需要處理IOException。
有一種情況的確會(huì)有受檢異常彈出,就是當(dāng)我們嘗試運(yùn)行一個(gè)線程,并在里面使用了 Thread.sleep() 語(yǔ)句。由于這是一個(gè)整體的方法而非單獨(dú)的純語(yǔ)句,它必須是完全有效的Java語(yǔ)句:
繼續(xù)來(lái)看一些沒(méi)在終端視頻中體現(xiàn)的其它特性
5、Java表達(dá)式
JShell終端還可以自己計(jì)算Java表達(dá)式。字符串連接、方法回調(diào)、算法,諸如此類?;旧?,任何你可以包裝在 System.out.println(/ expression here/) 里的都可以計(jì)算。正如你可能已經(jīng)知道到的其它計(jì)算方式,它會(huì)立即將結(jié)果賦給自己的一個(gè)變量并打印出來(lái)。
6、向前引用
JShell給向前引用提供了很棒的支持,所以你在定義方法時(shí)可以引用其他方法或變量,且這些方法或變量?jī)H會(huì)在一段時(shí)間后被定義。這是AdoptOpenJDK提供的REPL指南中的一個(gè)例子:
7、JShell API
JShell除了可以作為單獨(dú)的JDK工具,還可以提供一個(gè)API,它能對(duì)外部調(diào)用開(kāi)放所有的功能。這意味著外部工具可以連接并使用JShell的功能,如此一些很有趣的可能性突然就被開(kāi)發(fā)了出來(lái),比如在Eclipse、IntelliJ或Netbeans之類的IDE中引用它。對(duì)于該API可能還有更多創(chuàng)造性的用例,例如利用該API來(lái)擴(kuò)展靜態(tài)分析的工具,自動(dòng)化測(cè)試或者甚至是連接到實(shí)時(shí)的JVM。
8、在運(yùn)行中修改定義
你可以重新聲明變量、方法或者類,而無(wú)需擔(dān)心原始的聲明。一旦你這樣操作了,就會(huì)收到一個(gè)信息提示你發(fā)生了什么,但除此之外一切照舊。
彩蛋:你所需要的都是愛(ài)
如果你去查找目錄/repl/samples,將會(huì)發(fā)現(xiàn)這個(gè)使用Swing做出來(lái)的可愛(ài)樣例,會(huì)給你畫3顆小心心:
Java <3 REPL
你自己如何開(kāi)始使用JShell?
開(kāi)始之前,看看Adopt OpenJDK上的說(shuō)明書:倫敦Java社區(qū)(LJC)的入門套件。下面是步驟的快速摘要,來(lái)幫助你順利開(kāi)始。特別是如果你之前從未玩過(guò)Java搶先體驗(yàn)版本。
1、安裝 Java 9搶先體驗(yàn)版本JDK
2.編譯kulla-dev分支
3、編譯REPL
4、然后……現(xiàn)在你可以準(zhǔn)備運(yùn)行了
對(duì)于OS X用戶的重要提示:在運(yùn)行 compile.sh & run.sh 之前,編輯這些腳本,把 #!/usr/bin/sh 修改為 #!/bin/sh。
如果對(duì)于該過(guò)程有任何疑問(wèn),請(qǐng)?zhí)峤坏较旅娴脑u(píng)論區(qū),我們會(huì)盡可能給予幫助。
總結(jié)
很興奮能夠看到Kulla項(xiàng)目日趨成熟,最終將達(dá)到功能齊全的狀態(tài)。JShell有很廣泛的用例,但是首要的是能幫助新的和現(xiàn)有的開(kāi)發(fā)者快速測(cè)試他 們新學(xué)會(huì)的技巧?;镜腏ava或新的類只是讓你開(kāi)始充實(shí)大腦。此外,在當(dāng)下這段時(shí)間,JShell使得Java與其它擁有這些功能的語(yǔ)言處于同等水平, 或許未來(lái)還可以在官方的API和流暢的命令行體驗(yàn)下,開(kāi)創(chuàng)新的思路。
文章題目:Java9先睹為快:JShell動(dòng)手實(shí)踐
文章位置:http://m.5511xx.com/article/ccschii.html


咨詢
建站咨詢
