サーチ…


前書き

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 executableUnable 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
|  ^


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow