問題
同じディレクトリに配置された次の2つのソースファイルを次のコンパイルします。
コンパイルされたクラスを実行するコマンドはどれですか。
User.java
package app.entity;
public class User {
private String name;
private int pin;
public String getName() {
return name;
}
public User(String name, int pin) {
this.name = name;
this.pin = pin;
}
}
Main.java
package app.main;
import app.entity.User;
public class UserTest {
public static void main(String... args) {
User user = new User("Duke", 123);
System.out.println(user.getName());
}
}
コンパイル
$ javac -d build $(find . -name)
選択肢
A)java – cp build/app/main UserTest
B)java – cp build/app/entity build/app/main UserTest
C)java -cp build app.main. UserTest
D)java -p build/app/main:build/app/entity app.main.UserTest
E)java app.main.UserTest
F)java -p build -m app.main.UserTest
解答
A)java – cp build/app/main UserTest
B)java – cp build/app/entity build/app/main UserTest
C)java -cp build app.main. UserTest
D)java -p build/app/main:build/app/entity app.main.UserTest
E)java app.main.UserTest
F)java -p build -m app.main.UserTest
解説
コンパイル後に実行するための正しいコマンドは E)java app.main.UserTest です。
理由
- コンパイル後の構成:
User.java
とMain.java
をコンパイルした後、build
ディレクトリ内には次のような構造ができます:arduinoコードをコピーするbuild/ └── app/ ├── entity/ │ └── User.class └── main/ └── UserTest.class
- 実行するためのクラスパス:
java
コマンドでUserTest
を実行するためには、そのクラスが存在するパッケージ名を指定する必要があります。- クラス
UserTest
はapp.main
パッケージにあるため、完全修飾名であるapp.main.UserTest
を指定します。
- コマンド:
- E)java app.main.UserTest は正しい実行コマンドであり、クラスパスが
build
ディレクトリに設定されているため、正しく実行されます。
- E)java app.main.UserTest は正しい実行コマンドであり、クラスパスが
まとめ
したがって、正しいコマンドは E)java app.main.UserTest です。他の選択肢は、クラスパスの指定や形式が正しくないため、実行に失敗します。
対象資格:Java SE17 認定資格