Java
 Computer >> コンピューター >  >> プログラミング >> Java

Java 9のJShellにおける外部宣言のルールとは?修飾子の扱いを徹底解説

JShellとは

JShellJava 9で導入されたコマンドラインツールであり、Java初の公式REPL(Read-Eval-Print Loop)ツールです。ユーザーが入力したコードを読み取り、評価し、その結果を即座に出力するという、手軽なプログラミング環境を実現します。

通常のJavaプログラムでは、すべてのコードはクラスやインターフェースの中に記述する必要がありますが、JShellではクラスやインターフェースの外側に直接宣言を書くことができます。このような「外部宣言」には、以下のルールが適用されます。

外部宣言のルール

1)アクセス修飾子(public / protected / private)は無視される

public、protected、privateといったアクセス修飾子は無視されます。つまり、すべての宣言スニペットは、他のすべてのスニペットから自由にアクセス可能です。

jshell> private int i = 10;
i ==> 10

jshell> System.out.println(i);
10

2)final修飾子は無視される

final修飾子も無視されるため、値の変更や継承が許可されます。トップレベルの宣言にfinalを付けると、警告が表示されます。

jshell> final class A {void m() {} }
| Warning:
| Modifier 'final' not permitted in top-level declarations, ignored
| final class A {void m() {} }
| ^---^
| created class A

3)static修飾子は無視される

JShellにはコンテナとなるクラスが存在しないため、static修飾子は意味を持たず、無視されます。

jshell> static char letter = 'A';
| Warning:
| Modifier 'static' not permitted in top-level declarations, ignored
| static char letter = 'A';
| ^----^
letter ==> 'A'

4)defaultおよびsynchronized修飾子は使用不可

defaultおよびsynchronized修飾子は許可されておらず、使用するとエラーになります。

jshell> synchronized void method() {}
| Error:
| Modifier 'synchronized' not permitted in top-level declarations
| synchronized void method() {}
| ^----------^

5)abstract修飾子はクラス内でのみ使用可能

abstract修飾子はクラスに対してのみ許可されます。メソッドなどに直接付けることはできません。

jshell> abstract void method();
| Error:
| Modifier 'abstract' not permitted in top-level declarations
| abstract void method();
| ^------^

まとめ

JShellの外部宣言では、アクセス制御に関わる修飾子(public / protected / private)やfinal、staticは自動的に無視され、defaultとsynchronizedはエラーとなります。abstractはクラスにのみ適用可能です。これらのルールを理解しておくことで、JShellでの試行錯誤がよりスムーズになり、エラーや警告に戸惑うことなく効率的にコードを検証できるでしょう。

  1. Java 9における@Deprecatedアノテーションの改善点とは?新要素「since」「forRemoval」を徹底解説

    @Deprecatedアノテーションとはクラス、メソッド、フィールドなど、プログラム内のあらゆる要素に付与できる@Deprecatedアノテーションは、「その要素はもはや使用すべきではない」ことを示すためのものです。要素が非推奨とされる主な理由は以下の通りです。使用すると危険であり、エラーを引き起こす可能性がある将来のバージョンで互換性がなくなる可能性がある将来のバージョンで削除される可能性があるより優れた、効率的な代替手段がすでに提供されているJava 9で追加された2つの新しい要素Java 9では、@DeprecatedアノテーションにsinceとforRemovalという2つの新しい属性

  2. Java 9のJShellで使える「/edit」コマンドの種類と使い方

    JShellは、Java 9で導入されたコマンドラインツールです。main()メソッドを用意しなくても、宣言・ステートメント・式をその場で評価できるのが大きな特徴です。さらに、JShellにはJShell Edit Padという簡易テキストエディタが組み込まれており、「/edit」コマンドで起動することで、入力済みのコードを手軽に編集できます。 /editコマンドの3つの形式 JShellで利用できる「/edit」コマンドには、次の3つの形式があります。 /edit /edit [ID] /edit [コード名] /edit:引数なしで実行すると、現在アクティブなすべてのコードがテキストエデ