きっかけ
Java9のリリースまで半年をきったので、予習。
かなり前に触ったきり、使ってなかったので、予習を兼ねてやり直す。
環境準備
docker使ってJava9のイメージを使って試す。
使ったのは、java9-notebook
https://hub.docker.com/r/satoshun/java9-notebook/
起動したらexecボタンを押す。
もしくは、tryjshellっていうサービスがあるので、そちらを試す。
Java9をインストールする必要はないので、簡単に始められる。
tryjshell.org | Java 9's JShell
jshell
jshellとは、JavaのREPLツール。
REPL
- R : Read 読み込み
- E : Eval 評価
- P : Print 出力
- L : Loop readへ
javaのバージョン
java -version
で内容を確認
# java -version java version "9-ea" Java(TM) SE Runtime Environment (build 9-ea+102-2016-01-21-001533.javare.4316.nc) Java HotSpot(TM) 64-Bit Server VM (build 9-ea+102-2016-01-21-001533.javare.4316.nc, mixed mode)
jshell起動
etc/alternatives/jshell
を実行。
そうすると下記の内容が出力され、jshellが起動する。
| Welcome to JShell -- Version 9-ea | Type /help for help
お約束のHello World
まずは、Hello Worldの出力を確認してみる。
System.out.println("Hello World")
を入力してエンターを押すと、下記の内容が出力される。
-> System.out.println("Hello World") Hello World
ちなみに、タブ補完される。
System.
を入力してタブ押下すると、下記の内容が出力される。
-> System. Logger LoggerFinder arraycopy( class clearProperty( console() currentTimeMillis() err exit( gc() getLogger( getProperties() getProperty( getSecurityManager() getenv( identityHashCode( in inheritedChannel() lineSeparator() load( loadLibrary( mapLibraryName( nanoTime() out runFinalization() runFinalizersOnExit( setErr( setIn( setOut( setProperties( setProperty( setSecurityManager(
Javaをやっているとセミコロン(;)が必要なんじゃないかと思うかも知れないが、いらない。
変数を使ってのHello World
-> String str = "Hello World" | Added variable str of type String with initial value "Hello World" -> System.out.println(str) Hello World
でけた!
jshell終了方法
/exit
を入力する。
-> /exit | Goodbye
コマンド
コマンド | 説明 |
---|---|
/list | 入力したソースを一覧表示する |
/edit | 名前またはIDで参照されるソースを編集する(外部エディタの設定が必要) |
/drop | 名前またはIDで参照されるソースを削除する |
/save | ファイルにスニペット・ソースを保存する |
/open | ソースの入力としてファイルを開きます |
/vars | 宣言された変数およびその値をリストします |
/methods | 宣言されたメソッドおよびその署名をリストします |
/types | 宣言された型をリストします |
/imports | インポートされたアイテムをリストします |
/exit | jshellを終了する |
/reset | jshellの入力内容をリセットする |
/reload | リセットして関連する履歴をリプレイします |
/classpath | クラスパスにパスを追加します |
/history | 入力した内容の履歴 |
/help | jshellに関する情報を取得します |
/set | jshell構成情報を設定します |
/retain | 後続のセッションに対してjshell構成情報を保持します |
/? | jshellに関する情報を取得します |
/! | 最後のスニペットを再実行します |
/< id > | IDでスニペットを再実行します |
/-< n > | n回前のスニペットを再実行します |
コマンドを試す
随時追加予定
/list
まずは、準備として下記を入力
-> String a = "123" -> System.out.println(a)
そしたら、/list
を入力する。
-> /list 1 : String a = "123"; 2 : System.out.println(a)
今まで入力した内容が出力される。
宣言した変数名とか処理を忘れてしまった場合は、これを使って確認するわけだね。
/edit
クラスや変数を、設定した外部エディターで編集できる。
外部エディターを設定してない場合、下記のようなエラーになる。
-> /edit Exception in thread "main" java.awt.HeadlessException: No X11 DISPLAY variable was set, but this program performed an operation which requires it. at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:205) at java.awt.Window.<init>(Window.java:535) at java.awt.Frame.<init>(Frame.java:422) at javax.swing.JFrame.<init>(JFrame.java:224) at jdk.internal.jshell.tool.EditPad.<init>(EditPad.java:55) at jdk.internal.jshell.tool.EditPad.edit(EditPad.java:118) at jdk.internal.jshell.tool.JShellTool.cmdEdit(JShellTool.java:1141) at jdk.internal.jshell.tool.JShellTool.lambda$new$23(JShellTool.java:732) at jdk.internal.jshell.tool.JShellTool.processCommand(JShellTool.java:550) at jdk.internal.jshell.tool.JShellTool.run(JShellTool.java:492) at jdk.internal.jshell.tool.JShellTool.start(JShellTool.java:287) at jdk.internal.jshell.tool.JShellTool.start(JShellTool.java:260) at jdk.internal.jshell.tool.JShellTool.main(JShellTool.java:250)
使い方は、以下の通り。
/edit <name>