Java Language
JShell
サーチ…
前書き
JShellは、JDK 9で追加されたJava用のインタラクティブなREPLです。開発者は、式を評価したり、クラスをテストしたり、Java言語で試したりすることができます。 jdk 9の早期アクセスはhttp://jdk.java.net/9/から入手できます。
構文
- $ jshell - JShell REPLを起動する
- jshell> / <command> - 与えられたJShellコマンドを実行する
- jshell> / exit - JShellを終了する
- jshell> / help - JShellコマンドのリストを表示する
- jshell> <java_expression> - 指定されたJava式を評価する(セミコロンは省略可能)
- jshell> / vars OR / methods OR / types - 変数、メソッド、またはクラスのリストをそれぞれ参照してください。
- jshell> / open <file> - シェルへの入力としてファイルを読み込む
- jshell> / edit <identifier> - セットエディタでスニペットを編集する
- jshell> / set editor <command> - / editを使用してスニペットの編集に使用するコマンドを設定する
- jshell> / drop <identifier> - スニペットを削除する
- jshell> / reset - JVMをリセットしてすべてのスニペットを削除する
備考
JShellにはJava 9 JDKが必要です.JDKは現在(2017年3月) jdk9.java.netから早期アクセススナップショットとしてダウンロードできます。 jshell
コマンドを実行しようとするとUnable to locate an executable
がUnable to locate an executable
というエラーで始まり、 JAVA_HOME
が正しく設定されていることを確認しJAVA_HOME
。
デフォルト輸入額
次のパッケージは、JShellの起動時に自動的にインポートされます。
import java.io.*
import java.math.*
import java.net.*
import java.nio.file.*
import java.util.*
import java.util.concurrent.*
import java.util.function.*
import java.util.prefs.*
import java.util.regex.*
import java.util.stream.*
JShellの起動と終了
JShellの起動
JShellを起動する前に、 JAVA_HOME
環境変数がJDK 9インストールを指していることを確認してください。 JShellを起動するには、次のコマンドを実行します。
$ jshell
すべてうまくいけば、 jshell>
プロンプトが表示されます。
JShellの終了
JShellを終了するには、JShellプロンプトから次のコマンドを実行します。
jshell> /exit
式
JShellでは、セミコロンの有無にかかわらず、Java式を評価できます。これらは、基本的な表現や文からより複雑なものに及ぶことがあります。
jshell> 4+2
jshell> System.out.printf("I am %d years old.\n", 421)
ループと条件式も問題ありません。
jshell> for (int i = 0; i<3; i++) {
...> System.out.println(i);
...> }
ブロック内の式はセミコロンでなければならないことに注意することが重要です。
変数
JShell内でローカル変数を宣言することができます:
jshell> String s = "hi"
jshell> int i = s.length
変数はさまざまな型で再宣言できます。これはJShellで完全に有効です。
jshell> String var = "hi"
jshell> int var = 3
変数のリストを表示するには、JShellプロンプトで/vars
と入力します。
メソッドとクラス
JShell内でメソッドとクラスを定義できます。
jshell> void speak() {
...> System.out.println("hello");
...> }
jshell> class MyClass {
...> void doNothing() {}
...> }
アクセス修飾子は必要ありません。他のブロックと同様に、メソッド本体の内部にはセミコロンが必要です。変数の場合と同様に、メソッドやクラスを再定義することも可能です。メソッドまたはクラスのリストを表示するには、JShellプロンプトで/methods
または/types
をそれぞれ入力します。
スニペットの編集
JShellで使用されるコードの基本単位はスニペットまたはソースエントリです。ローカル変数を宣言するか、ローカルメソッドまたはクラスを定義するたびに、その名前が変数/メソッド/クラスの識別子であるスニペットを作成します。いつでも/edit
コマンドで作成したスニペットを/edit
。たとえば、私がFoo
というクラスをメソッド、 bar
作成したとしましょう:
jshell> class Foo {
...> void bar() {
...> }
...> }
さて、私は私の方法の体を埋めることを望みます。クラス全体をリライトするのではなく、編集することができます:
jshell> /edit Foo
デフォルトでは、スイングエディタが可能な最も基本的な機能をポップアップ表示します。ただし、JShellで使用するエディタを変更することはできます。
jshell> /set editor emacs
jshell> /set editor vi
jshell> /set editor nano
jshell> /set editor -default
スニペットの新しいバージョンに構文エラーが含まれている場合は、保存されないことがあります。同様に、スニペットは、元の宣言/定義が構文的に正しい場合にのみ作成されます。以下は動作しません。
jshell> String st = String 3
//error omitted
jshell> /edit st
| No such snippet: st
しかし、スニペットがコンパイルされ、コンパイル時にエラーが発生しても編集できます。たとえば、以下のように動作します。
jshell> int i = "hello"
//error omitted
jshell> /edit i
最後に、 /drop
コマンドを使用してスニペットを削除することができます。
jshell> int i = 13
jshell> /drop i
jshell> System.out.println(i)
| Error:
| cannot find symbol
| symbol: variable i
| System.out.println(i)
|
すべてのスニペットを削除し、それによってJVMの状態を\reset
するには、 \reset
使用します。
jshell> int i = 2
jshell> String s = "hi"
jshell> /reset
| Resetting state.
jshell> i
| Error:
| cannot find symbol
| symbol: variable i
| i
| ^
jshell> s
| Error:
| cannot find symbol
| symbol: variable s
| s
| ^