Chapter 18

Java パッケージ

おでん
おでん
2021.08.22に更新

パッケージとは

javaは疎結合という概念を採用しており、同じクラスには単一の処理を記述する傾向があります。
そのため、クラスファイルの数は多くなりがちです。
そうなると、クラスファイルをまとめて整理できると便利です。
その機能がパッケージです。
わかりやすく言うと、フォルダのようなものです。
また、規模の大きい開発になると、複数の会社間で共有して開発することもあります。
この場合に、同じクラス名があると上書きされてしまいます。
パッケージを使用すると、このようなリスクも回避することができます。

パッケージ化

クラスをパッケージに含めることをパッケージ化と言います。
以下の記述でパッケージ化を行えます。

package パッケージ名;

この宣言は必ず、ソースファイルの先頭に記述する必要があります。
つまり、この宣言の前には空白かコメントのみしか記述できません。
また、階層指定する場合は、「.」で区切ります。
1つのソースファイルに宣言できるパッケージは1つのみです。

package A.B.C.D;

パッケージ化したクラスのコンパイル・実行

パッケージ化したクラスの実行は、今までのようにファイル名のみでのコンパイル・クラス名のみでの実行はできません。
まずは、パッケージ名に対応したフォルダを作成し、その中にクラスファイルを保存する必要があります。
そして、以下の記述でコンパイル・実行を行います。

コンパイル
$ javac パッケージ名/ファイル名;   //Macの場合
$ javac パッケージ名¥ファイル名;   //Windowsの場合
実行
$ java パッケージ名/クラス名;  //Macの場合
$ java パッケージ名.クラス名;  //Macの場合(これでも可)
$ java パッケージ名¥クラス名;  //Windowsの場合
$ java パッケージ名.クラス名;  //Windowsの場合(これでも可)

また、コンパイル・実行する場所は、パッケージ名のフォルダの上層で行います。

import文

異なるパッケージのクラスを使用する場合には、以下のいずれかの方法で指定する必要があります。

  1. 完全名で指定する
  2. インポートする

1. 完全名で指定する

完全名で指定するというのは、対象クラスファイルを全階層の名前で指定することです。

2. インポートする

インポートするというのは、対象クラスファイルを取り込むことです。
以下の記述でインポートを行います。

import クラスの完全名;

また、パッケージ内の全てのクラスファイルを取り込みたい場合は「*」の記述で可能となります。

例(Bフォルダ直下の全てのクラスファイル)
import A.B.*;

クラスの指定は完全名であることに注意してください。
つまり、対象クラスファイルの1階層上の指定までは必須です。
上記の例で、Bフォルダ直下の全てのクラスファイルを取り込みたい場合に、以下の記述ではコンパイルエラーとなります。

import A.*;   //コンパイルエラー

ちなみに、「package」も「import」もソースファイルの先頭に記述するルールでしたが、両方を記述する場合もあると思います。
この場合には、packageを先に記述します。

package A;
import A.B.*

併せて、インポートされる側のクラスは以下の形でないといけません。

  • クラスのアクセス修飾子がpublic
  • 使用するクラスのメンバのアクセス修飾子がpublic