日本憲政史上最強の政策ブログを目指す!

反逆する武士

情報技術(IT)

【Java SE 11 Silver】黒本でプログラミングのお勉強【補講1:コマンドのまとめ】

投稿日:

徹底攻略Java-SE-11-Silver問題集1Z0-815対応

大変お世話になっております。
反逆する武士

uematu tubasaです。
初回投稿日時:2023年7月17日(令和5年7月17日)

ITエンジニアとして働く人間でございますが、疲労困憊です。

マジで疲れて、睡眠不足です。

しかしながら、しっかりとJavaの勉強をしたいと思います。

Javaコマンドの基本的な問題

【問題】以下の2つのコードのクラスファイルを生成するためのコマンドを記述しなさい。

package b;

public class B{

}

package a;

import b.B;

public class A{

  public static void main(String[] args){

    B b = new B();

  }

}

【回答】

javac a/A.java

java a/A

【解説】

JavaSE11からソースファイルモードが追加され、javaコマンドで.javaファイルを直接実行することができるようになりました。

この設問においては、AクラスのソースコードでBクラスを利用していることに着目します。

Aをコンパイルすることで、Aクラスが依存するBクラスも自動的にコンパイルされ、AとB両方のクラスファイルが生成されます。

したがって、aというパッケージのAクラスをjavacコマンドで生成することで、Bクラスも生成します。

その後、aというパッケージのAクラスを実行します。

この問題の重要な点は、クラスファイルを生成するためのコマンドを記述するようにとの指示にあります。

java a/A.javaとなると、実行するためのコマンドとしては有効ですが、クラスファイルを生成するわけではありません。

クラスやモジュールの依存関係を調べるためのコマンド

【問題】

クラスやモジュールの依存関係を調べるために使用するコマンドとして、正しいものを以下の選択肢から2つ選びなさい。

A. jmod describe

B. jdeps --list-deps

C. java hello.java

D. jar --show-module-resolution

E. java --show-module-resolution

【回答】B,E

【解説】

クラスの依存関係を調べるには、jdepsコマンドを使用します。

また、モジュールの依存関係を調べるためには、javaコマンドの--show-module-resolutionオプションを使用します。

したがって、選択肢BとEが正解となります。

ちなみに、選択肢Aのjmodコマンドはモジュールを作成するコマンドです。

また、選択肢Cはjavaコマンドのソースファイルモードによる実行です。

選択肢Dは複数のクラスをまとめてJarファイルを尽くすjarコマンドですが、このようなオプションは存在しません。

javacコマンドとjavaコマンドの出力先とクラスパスの関係性に関する問題

javacコマンドでは、-dオプションを使って、出力先を指定しない限り、ソースファイルと同じ場所にクラスファイルが出力されます。

javaコマンドでは、引数に完全修飾クラス名を指定します。

完全修飾クラス名をとディレクトリ構造はマッピングされているため、カレントディレクトリから見て完全修飾クラス名にマッピングされるディレクトリ構造が一致していないとクラスファイルを実行することはできません。

また、カレントディレクトリ以外にあるクラスファイルを実行するときは、javaコマンドに-cpオプションを付けて、クラスパスを指定します。

【問題】以下のプログラムをコンパイルし、実行するためのコマンドを以下の選択肢から選びなさい。

package ex15;

public class Sample {

  private final String name;

  public Sample(String name){

    this.name = name;

  }

}

package ex15;

import java.util.logger.Logger;

public class Main{

  static final Logger logger = Logger.getAnonymousLogger();

  public static void main(String[] args){

   var d = new Sample("sample");

   logger.info(d.toString());

  }

}

A. javac ex15/Sample.java ex15/Main.java

java -cp build ex15.Main

B. javac -d build ex15/Sample.java ex15/Main.java

java -cp build ex15.Main

C. javac -d build ex15/Sample.java ex15/Main.java

java ex15.Main

D. javac -d build ex15/Sample.java ex15/Main.java

java build.ex15.Main

【回答】B

【解説】

選択肢Aは-dオプションなしでコンパイルしているため、ソースファイルと同じ場所にクラスファイルが出力されます。

しかし、Javaコマンドではbuildディレクトリをクラスパスに指定しているため、クラスファイルを見つけることができません。

選択肢Bは、-dオプションでbuild ディレクトリへのクラスファイル出力を指定した上で、javaコマンドのクラスパスにbuildディレクトリを指定しているので、このコマンドは実行できます。

※buildがディレクトリと気づくべきでした。

選択肢CはJavaコマンドでディレクトリを指定しておらず、選択肢DではJavaコマンドの完全修飾クラス名が間違っているため、コマンド失敗します。

以上です。

――――――――――――――――――――――――――――――――――――――――
最後までお読みいただき、ありがとうございます。
★★★ブログTOP★★★
記事が参考になりましたら、ブログランキングで応援お願いします。

――――――――――――――――――――――――――――――――――――――――

-情報技術(IT)
-

Copyright© 反逆する武士 , 2024 All Rights Reserved Powered by AFFINGER5.