Java 9のJShellで守るべきルールまとめ!REPLツールの使い方と注意点を解説
Java 9では、対話型のREPL(Read-Evaluate-Print-Loop)ツールであるJShellが導入されました。JShellを使うことで、コードスニペットを実行しながら、その結果を即座に確認できます。ここでいうスニペット(snippet)とは、標準的なJava構文で記述できる1つの命令文を指し、単一の式、ステートメント、または宣言に相当します。
JShellは学習やプロトタイピングに非常に便利なツールですが、利用する際にはいくつか守るべきルールがあります。以下にその主なルールをまとめます。
JShellで従うべき主なルール
- スニペットには、import宣言、クラス宣言、メソッド宣言、インターフェース宣言、フィールド宣言、ステートメント、および一次式(primary expression)などが含まれます。
- package宣言は許可されていません。JShellのコードは、一時的な「JShell」パッケージの配下に自動的に配置されます。
- アクセス修飾子であるpublic、protected、private、および修飾子のfinalとstaticは、トップレベルの宣言では使用できません。指定した場合は警告とともに無視されます。
- 修飾子defaultとsynchronizedは、トップレベルの宣言では一切使用できません。ただし、ネストされたコンテキスト(クラスやメソッド内部)では使用可能です。
- abstract修飾子はクラスに対してのみ許可されます。
- ユーザーの入力が不完全な場合(例:System.outまで入力してprintln部分を省略した場合)、JShellの自動補完APIが追加の入力を促すプロンプトを表示します。
- 入力が完全でもセミコロン(;)がない場合は、JShellが自動的にセミコロンを補完して実行してくれます。
サンプルコード:Employeeクラスの作成とインスタンス化
以下のサンプルコードでは、必要なgetterメソッドを持つEmployeeクラスを作成し、new演算子を使ってインスタンス化しています。トップレベルでのprivateやpublicなどの修飾子の扱いにも注目してください。
jshell> class Employee {
...> private String firstName;
...> private String lastName;
...> private String designation;
...> public Employee(String firstName, String lastName, String designation) {
...> this.firstName = firstName;
...> this.lastName = lastName;
...> this.designation = designation;
...> }
...> public String getFirstName() {
...> return firstName;
...> }
...> public String getLastName() {
...> return lastName;
...> }
...> public String getDesignation() {
...> return designation;
...> }
...> public String toString() {
...> return "Name = " + firstName + ", " + lastName + " | " +
...> "designation = " + designation;
...> }
...> }
| created class Employee
jshell> Employee emp = new Employee("Sai", "Adithya", "Content Developer");
emp ==> Name = Sai, Adithya | designation = Content Developer
このように、JShellではクラス定義からインスタンス生成までを対話的に試せるため、小さなコード断片の動作検証やJavaの仕様確認に最適です。上記のルールを理解しておくことで、より効率的にJShellを活用できるでしょう。
-
Java 9 JShellの起動スクリプト(DEFAULT・JAVASE・PRINTING)の違いと使い方
JShellは、Java 9で導入された対話型のJavaシェルツールです。コマンドラインプロンプトから起動でき、入力したコードをその場で評価して結果を即座に表示します。いわゆるREPL(Read-Evaluate-Print-Loop:読み込み→評価→表示→繰り返し)ツールとして動作するため、コード断片の動作確認やAPIの学習に非常に便利です。 起動スクリプトの指定方法(--startupフラグ) JShellでは、起動時にスクリプトを読み込むことで、あらかじめ定義済みのimport文や便利なメソッドを使える状態でセッションを開始できます。起動スクリプトを指定するには「--startup」フ
-
Java 9のJShellで使える「/edit」コマンドの種類と使い方
JShellは、Java 9で導入されたコマンドラインツールです。main()メソッドを用意しなくても、宣言・ステートメント・式をその場で評価できるのが大きな特徴です。さらに、JShellにはJShell Edit Padという簡易テキストエディタが組み込まれており、「/edit」コマンドで起動することで、入力済みのコードを手軽に編集できます。 /editコマンドの3つの形式 JShellで利用できる「/edit」コマンドには、次の3つの形式があります。 /edit /edit [ID] /edit [コード名] /edit:引数なしで実行すると、現在アクティブなすべてのコードがテキストエデ