Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

Java Gold 例題集 moduleシステム

Posted at

問1

次のモジュール宣言があるとき、com.example.module1が他のモジュールに提供するのはどれですか?

module com.example.module1 {
    exports com.example.module1.api;
    requires java.sql;
}

選択肢:

  1. com.example.module1が他のモジュールに公開される。
  2. com.example.module1.apiパッケージが他のモジュールに公開される。
  3. java.sqlモジュールが他のモジュールに公開される。
  4. com.example.module1.apiパッケージが公開されない。
解答

2
`exports`を使用して`com.example.module1.api`パッケージを他のモジュールに公開しています。`requires`は依存モジュールを指定しますが、公開はしません。

問2

次のモジュール宣言のうち、com.example.module2が他のモジュールに提供するのはどれですか?

module com.example.module2 {
    requires transitive com.example.module1;
    exports com.example.module2.api;
}

選択肢:

  1. com.example.module2が他のモジュールに公開される。
  2. com.example.module1モジュールが他のモジュールにトランジティブに公開される。
  3. com.example.module2.apiパッケージが他のモジュールに公開される。
  4. 2と3の両方。
解答

4
`requires transitive`を使用して依存関係が他のモジュールに伝播し、`exports`を使用して`com.example.module2.api`が公開されます。

問3

次のモジュール宣言があるとき、com.example.module3が必要とするものはどれですか?

module com.example.module3 {
    uses com.example.module3.api.Service;
}

選択肢:

  1. com.example.module3.api.Serviceインターフェースを実装するクラスが必要。
  2. com.example.module3.api.Serviceインターフェースが他のモジュールに公開される。
  3. com.example.module3.api.Serviceインターフェースが自動的に提供される。
  4. com.example.module3が他のモジュールに公開される。
解答

1
`uses`を使用すると、特定のサービス型を使用することが宣言されますが、その実装は他のモジュールで提供される必要があります。

問4

次のモジュール宣言のうち、com.example.module4が提供するものはどれですか?

module com.example.module4 {
    provides com.example.module4.api.Service with com.example.module4.impl.ServiceImpl;
}

選択肢:

  1. com.example.module4.api.Serviceインターフェースが公開される。
  2. com.example.module4.api.Serviceインターフェースの実装が他のモジュールに提供される。
  3. com.example.module4.impl.ServiceImplクラスが他のモジュールに公開される。
  4. すべてのモジュールでcom.example.module4.impl.ServiceImplが使用できるようになる。
解答

2
`provides ... with`を使用して、指定されたサービス型の実装を提供します。他のモジュールでそのサービスを使用可能にします。

問5

次のモジュール宣言のうち、com.example.module5が許可するものはどれですか?

module com.example.module5 {
    opens com.example.module5.internal to com.example.module1;
}

選択肢:

  1. com.example.module5.internalパッケージが全モジュールからアクセス可能になる。
  2. com.example.module1モジュールからcom.example.module5.internalパッケージにリフレクションでアクセス可能になる。
  3. com.example.module5.internalパッケージが他のモジュールに公開される。
  4. com.example.module1モジュールにcom.example.module5が依存する。
解答

2
`opens ... to`を使用して、指定されたモジュール(ここでは`com.example.module1`)からパッケージへのリフレクションアクセスを許可します。

問6

次のモジュール宣言があるとき、com.example.module6が依存するのはどれですか?

module com.example.module6 {
    requires static com.example.module7;
    exports com.example.module6.api;
}

選択肢:

  1. com.example.module6.apiパッケージが公開される。
  2. com.example.module7モジュールが実行時に必須である。
  3. com.example.module7モジュールがコンパイル時にのみ必要である。
  4. com.example.module6が他のモジュールに依存する。
解答

3
`requires static`を使用すると、依存モジュール(ここでは`com.example.module7`)はコンパイル時にのみ必要となり、実行時には不要です。

問7

次のモジュール宣言があるとき、java.baseモジュールが自動的に含まれるのはどれですか?

module com.example.module8 {
    requires java.base;
}

選択肢:

  1. java.baseモジュールは自動的にすべてのモジュールに含まれる。
  2. java.baseモジュールは明示的に依存関係として指定する必要がある。
  3. com.example.module8java.baseに依存しない。
  4. java.baseはモジュールシステムの一部ではない。
解答

1
`java.base`モジュールはすべてのモジュールに暗黙的に含まれます。明示的に指定する必要はありませんが、指定することもできます。

問8

次のモジュール宣言があるとき、com.example.module9が許可するものはどれですか?

module com.example.module9 {
    requires com.example.module10;
    opens com.example.module9.internal;
}

選択肢:

  1. com.example.module9.internalパッケージがリフレクションでアクセス可能になる。
  2. com.example.module10が他のモジュールに公開される。
  3. com.example.module9が他のモジュールに依存する。
  4. com.example.module9.internalパッケージが公開される。
解答

1
`opens`を使用して、リフレクションアクセスを許可します。モジュール全体でアクセスを許可する場合、対象モジュールを指定しないで`opens`を使用します。

問9

次のモジュール宣言があるとき、com.example.module11が公開するのはどれですか?

module com.example.module11 {
    exports com.example.module11.api to com.example.module12, com.example.module13;
}

選択肢:

  1. com.example.module11全体が公開される。
  2. com.example.module11.apiパッケージがすべてのモジュールに公開される。
  3. com.example.module11.apiパッケージがcom.example.module12com.example.module13にのみ公開される。
  4. com.example.module11.apiパッケージが公開されない。
解答

3
`exports ... to`を使用して、特定のモジュールにのみ

パッケージを公開します。ここでは、com.example.module12com.example.module13のみに公開されています。

問10

次のモジュール宣言があるとき、com.example.module14が依存するのはどれですか?

module com.example.module14 {
    requires transitive com.example.module15;
    requires static com.example.module16;
}

選択肢:

  1. com.example.module15モジュールが実行時に必須である。
  2. com.example.module16モジュールがコンパイル時にのみ必要である。
  3. com.example.module15モジュールがトランジティブに他のモジュールに公開される。
  4. すべての選択肢が正しい。
解答

4
`requires transitive`は他のモジュールに公開する依存関係を指定し、`requires static`はコンパイル時にのみ必要な依存関係を指定します。

問11

次のモジュール宣言があるとき、com.example.module17が他のモジュールに公開するのはどれですか?

module com.example.module17 {
    opens com.example.module17.internal to com.example.module18;
    exports com.example.module17.api;
}

選択肢:

  1. com.example.module17.internalパッケージがすべてのモジュールに公開される。
  2. com.example.module18com.example.module17.internalパッケージにリフレクションアクセスできる。
  3. com.example.module17.apiパッケージがすべてのモジュールに公開される。
  4. 2と3の両方。
解答

4
`opens ... to`で特定のモジュールにリフレクションアクセスを許可し、`exports`で特定のパッケージをすべてのモジュールに公開します。

問12

次のモジュール宣言があるとき、com.example.module19com.example.module20に提供するのはどれですか?

module com.example.module19 {
    provides com.example.module19.api.Service with com.example.module19.impl.ServiceImpl;
    requires com.example.module20;
}

選択肢:

  1. com.example.module19.api.Serviceの実装がcom.example.module20で使用可能になる。
  2. com.example.module19.api.Serviceインターフェースが公開される。
  3. com.example.module19.impl.ServiceImplがすべてのモジュールに公開される。
  4. com.example.module19com.example.module20に依存する。
解答

1
`provides ... with`により、サービス実装が他のモジュール(ここでは`com.example.module20`)で使用可能になります。

問13

次のモジュール宣言があるとき、com.example.module21が依存するのはどれですか?

module com.example.module21 {
    requires static com.example.module22;
    exports com.example.module21.api;
}

選択肢:

  1. com.example.module21.apiパッケージが公開される。
  2. com.example.module22モジュールが実行時に必須である。
  3. com.example.module22モジュールがコンパイル時にのみ必要である。
  4. com.example.module21が他のモジュールに依存する。
解答

3
`requires static`は、指定されたモジュール(ここでは`com.example.module22`)がコンパイル時にのみ必要であることを示します。

問14

次のモジュール宣言があるとき、com.example.module23が使用するのはどれですか?

module com.example.module23 {
    uses com.example.module23.api.Service;
}

選択肢:

  1. com.example.module23.api.Serviceインターフェースを実装するクラスが必要。
  2. com.example.module23.api.Serviceインターフェースが他のモジュールに公開される。
  3. com.example.module23.api.Serviceインターフェースが自動的に提供される。
  4. com.example.module23が他のモジュールに公開される。
解答

1
`uses`を使用すると、特定のサービス型を使用することが宣言されますが、その実装は他のモジュールで提供される必要があります。

問15

次のモジュール宣言があるとき、com.example.module24が依存するのはどれですか?

module com.example.module24 {
    requires transitive com.example.module25;
    requires com.example.module26;
}

選択肢:

  1. com.example.module25モジュールが他のモジュールに公開される。
  2. com.example.module26モジュールがコンパイル時にのみ必要である。
  3. com.example.module26モジュールが他のモジュールに依存する。
  4. com.example.module25モジュールが他のモジュールに公開されない。
解答

1
`requires transitive`により、依存関係が他のモジュールに伝播され、`com.example.module25`モジュールが公開されます。

問16

次のモジュール宣言があるとき、com.example.module27が依存するのはどれですか?

module com.example.module27 {
    requires java.sql;
    exports com.example.module27.api;
}

選択肢:

  1. com.example.module27.apiパッケージが公開される。
  2. java.sqlモジュールがcom.example.module27に必要である。
  3. com.example.module27が他のモジュールに公開される。
  4. 1と2の両方。
解答

4
`requires`はモジュールの依存関係を指定し、`exports`はパッケージを公開します。したがって、どちらも正しいです。

問17

次のモジュール宣言があるとき、com.example.module28が許可するのはどれですか?

module com.example.module28 {
    opens com.example.module28.internal to com.example.module29;
    requires com.example.module30;
}

選択肢:

  1. com.example.module28.internalパッケージがすべてのモジュールからアクセス可能になる。
  2. com.example.module29com.example.module28.internalパッケージにリフレクションでアクセスできる。
  3. com.example.module30モジュールが他のモジュールに公開される。
  4. com.example.module28が他のモジュールに依存する。
解答

2
`opens ... to`を使用して、特定のモジュール(ここでは`com.example.module29`)にリフレクションアクセスを許可します。

問18

次のモジュール宣言があるとき、com.example.module31が依存するのはどれですか?

module com.example.module31 {
    requires transitive com.example.module32;
    requires static com.example.module33;
}

選択肢:

  1. com.example.module32モジュールが実行時に必須である。
  2. com.example.module33モジュールがコンパイル時にのみ必要である。
  3. com.example.module32モジュールがトランジティブに他のモジュールに公開される。
  4. すべての選択肢が正しい。
解答

4
`requires transitive`は他のモジュールに公開する依存関係を指定し、`requires static`はコンパイル時にのみ必要な依存関係を指定します。

問19

次のモジュール宣言があるとき、com.example.module34が公開するのはどれですか?

module com.example.module34 {
    exports com.example.module34.api to com.example.module35, com.example.module36;
    requires com.example.module37;
}

選択肢:

  1. com.example.module34.apiパッケージがすべてのモジュールに公開される。
  2. com.example.module34.apiパッケージがcom.example.module35com.example.module36にのみ公開される。
  3. com.example.module37モジュールが他のモジュールに依存する。
  4. com.example.module34モジュールが他のモジュールに公開される。
解答

2
`exports ... to`を使用して、特定のモジュールにのみパッケージを公開します。ここでは、`com.example.module35`と`com

.example.module36`にのみ公開されます。

問20

次のモジュール宣言があるとき、com.example.module38が依存するのはどれですか?

module com.example.module38 {
    requires transitive com.example.module39;
    requires com.example.module40;
}

選択肢:

  1. com.example.module39モジュールが他のモジュールに公開される。
  2. com.example.module40モジュールが他のモジュールに依存する。
  3. com.example.module39モジュールがコンパイル時にのみ必要である。
  4. com.example.module40モジュールが他のモジュールに公開される。
解答

1
`requires transitive`により、依存関係が他のモジュールに公開されます。

問21

次のコマンドは、指定されたモジュールの依存関係を表示するために使用されます。どのコマンドを使用すればよいですか?

選択肢:

  1. java describemodule
  2. javac module
  3. jdeps summary
  4. jlink listmodule
解答

3
`jdeps summary`コマンドは、指定されたモジュールの依存関係を表示するために使用されます。

問22

次のコマンドは、モジュールパス上のモジュールをすべてリスト表示します。どのコマンドを使用すればよいですか?

選択肢:

  1. java listmodules
  2. javac modulepath
  3. jdeps dotoutput
  4. jlink addmodules
解答

1
`java listmodules`コマンドは、モジュールパス上のモジュールをすべてリスト表示します。

問23

次のコマンドは、モジュールを含むカスタムランタイムイメージを作成するために使用されます。どのコマンドを使用すればよいですか?

選択肢:

  1. java describemodule
  2. javac modulepath
  3. jdeps jdkinternals
  4. jlink output
解答

4
`jlink output`コマンドは、モジュールを含むカスタムランタイムイメージを作成するために使用されます。

問24

次のコマンドは、モジュールが他のモジュールに依存しているかどうかを確認するために使用されます。どのコマンドを使用すればよいですか?

選択肢:

  1. java describemodule
  2. javac module
  3. jdeps summary
  4. jlink addmodules
解答

3
`jdeps summary`コマンドは、モジュールが他のモジュールに依存しているかどうかを確認するために使用されます。

問25

次のコマンドは、モジュールの内容を表示するために使用されます。どのコマンドを使用すればよいですか?

選択肢:

  1. java describemodule
  2. javac module
  3. jdeps dotoutput
  4. jlink launcher
解答

1
`java describemodule`コマンドは、モジュールの内容を表示するために使用されます。

問26

ボトムアップ移行では、モジュール化のどの部分から始めますか?

選択肢:

  1. 既存のライブラリや依存関係からモジュール化を開始する。
  2. アプリケーション全体を一度にモジュール化する。
  3. 全モジュールを一度にモジュール化する。
  4. モジュール化を使用しない。
解答

1
ボトムアップ移行では、既存のライブラリや依存関係からモジュール化を開始します。

問27

トップダウン移行では、モジュール化のどの部分から始めますか?

選択肢:

  1. 既存のライブラリや依存関係からモジュール化を開始する。
  2. アプリケーション全体を一度にモジュール化する。
  3. 全モジュールを一度にモジュール化する。
  4. モジュール化を使用しない。
解答

2
トップダウン移行では、アプリケーション全体を一度にモジュール化します。

問28

次のコマンドは、指定されたモジュールの依存関係をビジュアルに表現します。どのコマンドを使用すればよいですか?

選択肢:

  1. java describemodule
  2. jdeps dotoutput
  3. javac modulepath
  4. jlink compress
解答

2
`jdeps dotoutput`コマンドは、指定されたモジュールの依存関係をビジュアルに表現します。

問29

ボトムアップ移行の利点は何ですか?

選択肢:

  1. 一度に全アプリケーションをモジュール化できる。
  2. 既存のライブラリから段階的にモジュール化できるため、リスクが少ない。
  3. 依存関係のない新規プロジェクトに最適である。
  4. 既存のコードを変更せずにモジュール化できる。
解答

2
ボトムアップ移行では、既存のライブラリから段階的にモジュール化するため、リスクを最小限に抑えつつ進めることができます。

問30

トップダウン移行のリスクは何ですか?

選択肢:

  1. モジュール化が不完全なまま進められる。
  2. 既存のライブラリを変更せずにモジュール化できる。
  3. 一度に全アプリケーションをモジュール化するため、リスクが高い。
  4. モジュール化を使用しない。
解答

3
トップダウン移行は一度に全アプリケーションをモジュール化するため、リスクが高くなります。

問31

あるモジュールのすべての公開クラスとメソッドを表示するために使用されるコマンドで、適切なオプションを選択してください。

選択肢:

  1. java --list-modules
  2. jdeps --verbose:class
  3. jdeps --print-module-deps
  4. java --describe-module <module-name>
解答

4
`java --describe-module `コマンドを使用すると、指定したモジュールのすべての公開クラスとメソッドが表示されます。

問32

module-info.javaファイルでモジュールが他のモジュールからインターフェースを受け取るために必要なディレクティブはどれですか?

選択肢:

  1. requires transitive
  2. exports
  3. provides
  4. uses
解答

4
`uses`ディレクティブは、モジュールが他のモジュールからサービスインターフェースを受け取る際に使用されます。

問33

jdepsコマンドで指定されたモジュールの依存関係を含むグラフを生成するオプションはどれですか?

jdeps INSERTCOMMAND

選択肢:

  1. --summary
  2. --print-module-deps
  3. --dotoutput
  4. --verbose:class
解答

3
`--dotoutput`オプションは、モジュールの依存関係をグラフで視覚的に表現します。

問34

次のmodule-info.javaファイルの内容について、正しい選択肢を選んでください。

module com.example.app {
    requires java.sql;
    exports com.example.app.service;
    uses com.example.app.service.MyService;
    provides com.example.app.service.MyService with com.example.app.service.MyServiceImpl;
}

選択肢:

  1. このモジュールはjava.sqlモジュールを使用し、com.example.app.serviceパッケージをエクスポートしますが、サービスの提供はしていません。
  2. このモジュールはjava.sqlモジュールを使用し、サービスを提供しますが、サービスの使用はしていません。
  3. このモジュールはjava.sqlモジュールを使用し、com.example.app.serviceパッケージをエクスポートし、サービスの使用と提供の両方を行っています。
  4. このモジュールはjava.sqlモジュールを使用し、com.example.app.serviceパッケージをエクスポートし、サービスの使用はしていますが、提供はしていません。
解答

3
このモジュールは、`java.sql`モジュールを使用し、`com.example.app.service`パッケージをエクスポートし、サービスの使用(`uses`)と提供(`provides`)の両方を行っています。

問35

次のシナリオでモジュールの名前解決に問題が生じた場合、考えられる原因はどれですか?

シナリオ:

  • module-info.javarequiresされているモジュールが見つからない。

選択肢:

  1. モジュールパスにモジュールが存在しない。
  2. exportsディレクティブが正しく使用されていない。
  3. providesディレクティブが欠如している。
  4. usesディレクティブが間違っている。
解答

1
`requires`されているモジュールが見つからない場合、モジュールパスにモジュールが存在しない可能性が最も高いです。

問36

自動モジュールを利用する際の注意点として正しい選択肢を選んでください。

選択肢:

  1. 自動モジュールはすべてのrequires関係を自動的に解決します。
  2. 自動モジュールは明示的なexportsディレクティブを必要としません。
  3. 自動モジュールは他のモジュールから使用できません。
  4. 自動モジュールは名前付きモジュールと同じ方法で管理されます。
解答

2
自動モジュールは、モジュール化されていないJARファイルを自動的にモジュールとして扱い、明示的な`exports`ディレクティブを必要としません。

問37

次のmodule-info.javaファイルで、com.example.apiが依存するモジュールを変更せずに、com.example.implモジュールの内部パッケージcom.example.impl.internalcom.example.apiモジュールで使用可能にする方法はどれですか?

module com.example.impl {
    INSERTCODE
}

選択肢:

  1. exports com.example.impl.internal to com.example.api;
  2. opens com.example.impl.internal to com.example.api;
  3. requires com.example.api;
  4. provides com.example.api with com.example.impl.internal;
解答

2
`opens`ディレクティブを使用することで、特定のモジュールに対して内部パッケージを使用可能にします。

問38

jlinkコマンドを使用して、特定のモジュールを含む最小限のランタイムイメージを作成するために正しい手順はどれですか?

選択肢:

  1. jlink --list-modules --output <path>
  2. jlink --module-path <path> --add-modules <module-name> --output <path>
  3. jlink --describe-module --compress 2
  4. jlink --module-path <path> --launcher <launcher-name> --output <path>
解答

2
`jlink --module-path --add-modules --output `は、指定したモジュールを含む最小限のランタイムイメージを作成するための正しいコマンドです。

問39

次のmodule-info.javaファイルについて、指定されたパッケージが複数のモジュールによってエクスポートされている場合の挙動として正しいものはどれですか?

module com.example {
    exports com.example.package;
}
module com.another {
    exports com.example.package;
}

選択肢:

  1. 競合が発生し、コンパイルエラーになる。
  2. 最初に見つかったモジュールが優先される。
  3. モジュールパスに明示的に順序が指定されている場合、指定された順に解決される。
  4. すべてのモジュールから同時に使用可能となる。
解答

1
複数のモジュールが同じパッケージをエクスポートしている場合、競合が発生し、コンパイルエラーとなります。

問40

module-info.javaファイルで、モジュールが他のモジュールから公開されるクラスを明示的に受け取るにはどのディレクティブを使用しますか?

選択肢:

  1. requires transitive
  2. exports
  3. opens
  4. uses
解答

1
`requires transitive`ディレクティブは、モジュールが他のモジュールから公開されるクラスを明示的に受け取る際に使用します。
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?