JavaA2Z

KAB-studio > プログラミング > JavaA2Z > パッケージとは

パッケージ

日本語 梱包
英語 package
ふりがな ぱっけーじ
フリガナ パッケージ

解説

クラスの「苗字」。
 
クラスの数が増えた場合、各クラスソースファイルが1ディレクトリ内に増え、管理が難しくなる。また、クラス名の重複が許されないため、同じクラス名にしないよう気を付ける必要が出てくる。
この問題を解決するのが「パッケージ」である。
パッケージはソースファイルディレクトリ毎に別に管理し、そのディレクトリ名で「苗字」を付けることで、クラスを分類し、またクラス名の重複を可能にする。
 
クラスをパッケージ毎に分ける場合、まずソースファイルの置いてあるディレクトリを確認する。
ソースファイルの置いてあるディレクトリ」とは、コンパイルするソースファイルを置いてあるディレクトリのことで、通常、プロジェクトディレクトリ下に「src」というディレクトリ名で作られている。具体的には、Eclipseであれば、各プロジェクトプロパティの「Javaビルドパス」ページの「ソース」タブで表示されているディレクトリがそれである。
この「ソースファイルの置いてあるディレクトリ」にさらにディレクトリを作り、その中にソースファイルを置く。
そのソースファイルは、最初の方ので「package パッケージ名;」という形式でパッケージ名を付ける。
パッケージ名は「ソースファイルの置いてあるディレクトリ」からの相対ディレクトリを「.」で継ないだものである。たとえば「ソースファイルの置いてあるディレクトリ」が「project/src/」であれば、「project/src/test/test2/OtherPackageClass2.javaクラスパッケージ名は「package test.test2;」となる。
以上で、このクラスはパッケージで囲まれる。OtherPackageClass2クラスの例で言えば「test.test2」というパッケージ名が付いた「test.test2.OtherPackageClass2」がクラスの正式名称となる。
 
パッケージに囲まれたクラスを使用する場合には、2つの方法がある。
ひとつは、importを使用してあらかじめパッケージ名を省略しておく方法。クラス宣言の前に「import 使用したいクラスパッケージも含めたクラス名;」と「インポート宣言」をうことで、パッケージ名を付けずにそのクラスを使用することができる。
上記のOtherPackageClass2の例であれば「import test.test2.OtherPackageClass2;」という形式で、OtherPackageClass2クラスパッケージ名を付けずに使用することができる。
ただし、この方法の場合、パッケージは異なるが同名のクラスを同じようにインポートした場合、クラス名が重複してしまうため、コンパイルエラーとなってしまう。
 
もうひとつの方法は、インポートせずに常にパッケージ名を付けたクラス名、つまり「完全修飾名」を使用する方法である。
上記の例なら「test.test2.OtherPackageClass2」という形式で使用することができる。
この場合にはクラス名が重複してもパッケージが異なるためコンパイルエラーにはならないが、ソースコード冗長になるため見にくくなる可能性がある。
 
プログラムは、ひとつのパッケージに大量のクラスを置くと、それだけで管理が大変になる。各クラスを適切なパッケージに分け、効率よく管理するのがいいだろう。

参考サイト

  • (参考サイトはありません)

(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// Sample.java
// test.test2パッケージ内のOtherPackageClassクラスを使用します。
import test.test2.OtherPackageClass;

public class Sample
{
    public static void main( String[] args )
    {
        // OtherPackageClassクラスを使用します。
        // importしてあるのでそのまま使えます。
        OtherPackageClass otherPackageClass = new OtherPackageClass();
        otherPackageClass.output();
        // OtherPackageClass#output()

        // importしてない場合には以下のようにパッケージ名を
        // 省略せずに使用します。
        test.test2.OtherPackageClass otherPackageClass2 = new test.test2.OtherPackageClass();
        otherPackageClass2.output();
        // OtherPackageClass#output()
    }
}


// test/test2/OtherPackageClass.java
/**
    つまり、このファイルはtest/test2ディレクトリの中にあります。
    Sample.javaはtestディレクトリと同階層にあります。
    位置関係はこんな感じ。

    project/src/Sample.java
    project/src/test/test2/OtherPackageClass.java
*/
package test.test2;
//      ↑test/test2ディレクトリに置いてあるので「test.test2」です。

/**
*   test.test2パッケージ内のクラス。
*/
public class OtherPackageClass
{
    /**
    *   出力します。
    */
    public void output()
    {
        System.out.println( "OtherPackageClass#output()" );
    }
}
// Sample.java
// test.test2パッケージ内のOtherPackageClassクラスを使用します。
import test.test2.OtherPackageClass;

public class Sample
{
    public static void main( String[] args )
    {
        // OtherPackageClassクラスを使用します。
        // importしてあるのでそのまま使えます。
        OtherPackageClass otherPackageClass = new OtherPackageClass();
        otherPackageClass.output();
        // OtherPackageClass#output()

        // importしてない場合には以下のようにパッケージ名を
        // 省略せずに使用します。
        test.test2.OtherPackageClass otherPackageClass2 = new test.test2.OtherPackageClass();
        otherPackageClass2.output();
        // OtherPackageClass#output()
    }
}


// test/test2/OtherPackageClass.java
/**
    つまり、このファイルはtest/test2ディレクトリの中にあります。
    Sample.javaはtestディレクトリと同階層にあります。
    位置関係はこんな感じ。

    project/src/Sample.java
    project/src/test/test2/OtherPackageClass.java
*/
package test.test2;
//      ↑test/test2ディレクトリに置いてあるので「test.test2」です。

/**
*   test.test2パッケージ内のクラス。
*/
public class OtherPackageClass
{
    /**
    *   出力します。
    */
    public void output()
    {
        System.out.println( "OtherPackageClass#output()" );
    }
}

この単語を含むページ

「解説」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2006/01/13
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。