← Spring コース
6. パッケージ・完全修飾名・import・クラスパス・クラスローダ
は、をまとめる名前空間です。ソースの先頭に com.example.demo; のように宣言します。パッケージ名とクラス名を . でつないだ com.example.demo.Hello がで、Java のコードは他のクラスを、場所ではなくこの名前で指します。Node で近いものを挙げるならフォルダとのパスですが、相対パスという考え方が無いので、対応は弱いです。
は、他のパッケージのクラスを短い名前()で書けるようにする宣言です。ファイルを読み込む命令ではありません。実際にクラスを探して読み込むのはという部品で、探しに行く場所の一覧がです。クラスパスにはフォルダか を並べ、何も指定しなければ今いるフォルダになります。コンパイルした は、その中のパッケージ名どおりのフォルダに置かれます。
Node の import はファイルを読み込みますが、Java の import は名前が同じだけの別物です。使わない import を書いても .class に痕跡は残らず、実行時にも読み込まれませんでした。 で起動した素の Java では、クラスパスは起動時に決まる平らな1本の一覧で、同じ名前のクラスは先に見つかった1つだけが使われます。OS がコマンドを探す場所の一覧である PATH とは別物です。
点線の付いた語はタップすると説明が出ます。用語集を開く →
import lib.util.Helper;単純名 Helper で書けるようにする宣言。この行では何も読み込まれない
Node: import はファイルを読み込むコードが Helper を初めて使う
完全修飾名 lib.util.Helperパッケージ名 lib.util と、単純名 Helper
この名前のクラスを探す
クラスローダクラスを探して読み込む役の部品
探しに行く場所
クラスパスのフォルダout/lib/util/Helper.class。自分の .class はパッケージ名どおりのフォルダにある
クラスパスの JARライブラリの .class
JDK の標準ライブラリString などはここ。クラスパスとは別の場所
- ・言語仕様(JLS SE 25 の 7.5 節)は import を、クラスなどを単純名で参照できるようにする宣言だと説明しています。import を書かなくても、完全修飾名で書けば使えます。java.lang パッケージ(String など)は、import を書かなくても単純名で使えます
- ・import して単純名で書いたソースと、import せず完全修飾名で書いたソースは、同じ命令の .class になりました。使わない import は .class に何も残らず、実行時のクラス読み込みのログにも出ませんでした(JDK 25.0.4.1、2回とも同じ)
- ・import に書くのは ./cats.service のようなパスではなく、完全修飾名です。import java.util.*; は java.util の直下の型すべてを指し、java.util.concurrent のような下のパッケージは含みません
- ・.class はパッケージ名どおりのフォルダに置かれますが、パッケージそのものは名前で、フォルダではありません。置き場所がそうなる理由は次のセクションで扱います
- ・クラスパスは java の -cp で指定します。区切りは Windows が ; で、ほかは : です。CLASSPATH という環境変数でも渡せますが、-cp を書くと環境変数の設定は使われません。PATH は OS が java などのコマンドを探す場所の一覧で、クラスパスとは別物です
- ・図の Helper のような自作のクラスは、手元の JVM(HotSpot)では初めて使う時点で読み込まれました。仕様がそう義務づけているわけではありません。String や ArrayList のような JDK のクラスの多くは、自分のコードが使う前に、JVM の起動の途中で読み込まれていました(JDK 22 のログで確認)
- ・クラスパスが1本の平らな一覧なのは、java -cp で起動した場合です。Tomcat は、置かれたアプリごとに別のクラスローダを使い、WAR の中の WEB-INF/classes と WEB-INF/lib から読み込みます
- ・node_modules との対応は、名前から実体のファイルを探す、という役割だけです。Node は import を書いたファイルの場所から上のフォルダへ node_modules を探していきます
▶ サンプルコードを実行してみよう(自由に書き換えてOK)
Java
図やコードに出てくる用語(タップで説明)
サンプルコードで身につける(5本) →
学んだ概念を、素朴な例から実務寄りの例まで5つの具体例で確認します。
公式ドキュメントで詳しく ↗