Java クラス、パッケージ、およびディレクトリー

Java™ のクラスはそれぞれ、あるパッケージに属しています。 どのクラスがどのパッケージに含まれるかは、Java ソース・ファイルの最初のステートメントに記述されます。 ソース・ファイルにパッケージ・ステートメントがない場合、そのクラスは名前のないデフォルトのパッケージに含まれると見なされます。

パッケージ名は、クラスの位置するディレクトリー構造と関連があります。 統合ファイル・システムでは、多くの PC システムや UNIX® システムと同様に、階層ファイル構造で Java クラスを格納できます。 Java クラスを格納するディレクトリーの相対ディレクトリー・パスは、そのクラスが属するパッケージの名前と一致していなければなりません。 たとえば、次の Java クラスで考えてみます。

     package classes.geometry;
     import java.awt.Dimension;

     public class Shape {

     Dimension metrics;

        // The implementation for the Shape class would be coded here ...

     }

上記のコードのパッケージ・ステートメントは、Shape クラスが classes.geometry パッケージに属していることを示しています。 したがって、Java ランタイムが Shape クラスを検出するためには、Shape クラスが相対ディレクトリー構造の classes/geometry に格納されていなければなりません。

注: パッケージ名は、クラスが格納されているディレクトリーの相対ディレクトリー名に対応しています。 Java 仮想マシンのクラス・ローダーは、クラスパスで指定された各ディレクトリーに相対パス名を追加してクラスを探します。 また、Java 仮想マシンのクラス・ローダーは、クラスパスで指定された ZIP ファイルまたは JAR ファイルを検索してクラスを検出することもできます。

たとえば、Shape クラスが「ルート」(/) ファイル・システムの /Product/classes/geometry ディレクトリーに格納されている場合は、クラスパスに /Product を指定する必要があります。

図 1: 異なるパッケージ内にある同じ名前の Java クラスのディレクトリー構造の例

次の図は、異なるディレクトリーにある同じ名前の Java クラスのディレクトリー構造を示しています。

注: Shape クラスの複数のバージョンをディレクトリー構造に格納することができます。 Shape クラスのベータ版を使用するには、CLASSPATH で、Shape クラスが格納されている他のディレクトリーや ZIP ファイルの前に /Beta/myclasses を指定します。

Java コンパイラーは、Java ソース・コードをコンパイルするときに、Java クラスパス、パッケージ名、およびディレクトリー構造を使ってパッケージとクラスを探します。 詳しくは、Java クラスパスを参照してください。