Java 9の名前のないモジュール(Unnamed Module)とは?仕組みと使い方を解説
Java 9で導入されたモジュールシステム(Project Jigsaw)において、名前のないモジュール(unnamed module)は無名パッケージの概念に対応する重要な仕組みです。これは、どの名前付きモジュールにも定義されていないパッケージやクラスが、クラスパス上のJARファイルから読み込まれる際に所属するモジュールです。コードがこれらのファイルから型を読み込もうとすると、モジュールシステムは自動的にクラスパスを検索し、該当するクラスをロードします。
名前のないモジュールには、以下のような特徴があります。
- 他のすべてのモジュール(名前付きモジュールや組み込みプラットフォームモジュールを含む)を読み取ることができる
- 自身のすべてのパッケージをエクスポートする
また、名前のないモジュール内のパッケージが、名前付きモジュールでも同じ名前で定義されている場合、そのパッケージは無視されます。
名前のないモジュールがアクセスできるもの
- モジュールパス上にあるすべてのモジュールがエクスポートしているすべてのパッケージ
- クラスパス上のすべてのJARファイル(つまり、この名前のないモジュールに存在する他のすべての型)
構文
java --module-path out -module moduleName/com.tutorialspoint.UnnamedModuleTest
サンプルコード
次の例では、Module APIを使って、実行中のクラスが属するモジュールの情報を取得しています。
public class UnnamedModuleTest {
public static void main(String args[]) {
Module module = UnnamedModuleTest.class.getModule();
System.out.println("Module: "+ module);
System.out.println("Name: " + module.getName());
System.out.println("isNamed: " + module.isNamed());
System.out.println("Descriptor: " + module.getDescriptor());
}
}実行結果
Module: unnamed module @c818063 Name: null isNamed: false Descriptor: null
実行結果からわかるように、クラスパスから実行されたクラスは名前のないモジュールに属し、getName()とgetDescriptor()はnullを返し、isNamed()はfalseを返します。これは、モジュール記述子(module-info.java)を持たないためです。
-
JavaのStringIndexOutOfBoundsExceptionとは?発生原因と対処法をわかりやすく解説
StringIndexOutOfBoundsExceptionとはJavaにおいて、文字列(String)は一連の文字を格納するために使用され、オブジェクトとして扱われます。文字列は、java.langパッケージに含まれるStringクラスによって表現されます。文字列の作成方法は主に2つあります。1つは他のオブジェクトと同様にnewキーワードを使用する方法、もう1つはプリミティブ型のようにリテラルを直接代入する方法です。String stringObject = new String(Hello how are you); String stringLiteral = Welcome to T
-
JavaのArrayIndexOutOfBoundsExceptionとは?発生原因と対処法を解説
配列とインデックスの基本 配列(Array)とは、同じ型の要素を固定サイズで順番に格納するためのデータ構造(コンテナ/オブジェクト)です。配列のサイズ(長さ)は生成時に決定され、後から変更することはできません。 配列内の各要素の位置は「インデックス(添字)」と呼ばれます。Javaの配列は0始まりのため、最初の要素はインデックス0、2番目の要素はインデックス1、というように順に番号が割り当てられます。 配列の各要素へは、「配列名[インデックス]」という形式の式を使ってアクセスします。 System.out.println(myArray[3]); // 1457 が出力される たとえばサイズ7