私たちはいくつかの Java プログラムを作成しました。以前のすべての Java プログラムは、Test.java などのファイルとして保存されていました。その後、プログラムは Test.class にコンパイルされます。最終的には $java Test を使用してプログラムを実行します。
ただし、通常の Java プロジェクトでは、複数の .java プログラムを作成する必要があることが多く、最終的な Java 製品にはすべての Java プログラムが含まれます。したがって、Java は Java プログラムを編成するという問題を解決する必要があります。パッケージの目的は、Java プログラムをより適切に整理することです。
パッケージの作成
パッケージの作成は非常に簡単です。 Java プログラムの先頭にパッケージを追加するだけです。 Human クラスを例としてパッケージに入れてみましょう。
次のようにコードをコピーします。
パッケージcom.vamei.society;
パブリッククラス 人間
{
/**
* コンストラクター
*/
public Human(int h)
{
this.height = h;
System.out.println("私は生まれました");
}
/**
*アクセサ
*/
public int getHeight()
{
this.height を返します。
}
/**
* ミューテーター
*/
public void 成長高さ(int h)
{
この高さ = この高さ + h;
}
プライベート int 高さ;
}
上記のステートメントの最初の行をコピーするコードは次のとおりです。
パッケージcom.vamei.society;
プログラムが com.vamei.society パッケージ内にあることを示します。 com.vamei (vamei.com の逆) は、パッケージ作成者のドメイン名を表します (残念ながら、このドメイン名は他の人によって登録されているため、デモンストレーションの目的でのみ使用されます)。 Java では、異なる作成者を区別するために、パッケージにドメイン名プレフィックスが必要です。 Society はさらにローカルなパス名です。 com.vamei.society を合わせてパッケージ名を形成します。
パッケージは Java プログラムに名前空間を提供します。 Java クラスの完全パスは、そのパッケージとクラス名 (com.vamei.society.Human など) で構成されます。対応する Human.java プログラムは com/vamei/society/ の下に配置する必要があります。クラスはフルパスで識別されるため、Java が混乱することなく、異なるパッケージに同じ名前のクラスを含めることができます。たとえば、com.vamei.society.Human と com.vamei.creature.Human は 2 つの異なるクラスです。
さらに詳しく見てみましょう。 Human クラスはパブリックであり、そのコンストラクターもパブリックであるため、他のオブジェクトはこのクラスを呼び出すことができます。前に述べたように、Java ファイル内に存在できるパブリック クラスは 1 つだけであり、クラスは .java ファイルと同じ名前を持つ必要があります。クラスには、実際にアクセス許可を表す public キーワードは必要ありません。クラスは、それが配置されているパッケージ内で表示されます。つまり、パッケージ内の他の Java プログラムはクラスにアクセスできます。これは Java のデフォルトのアクセスです。
同様に、オブジェクトのメンバーもデフォルトの権限 (パッケージに表示されます) を持つことができます。たとえば、getHeight() メソッドの前にある public キーワードを削除します。
パッケージ呼び出し
Human.java によってコンパイルされた Human.class を対応するフォルダーに配置するだけです。たとえば、Human.class を com/vamei/society/ に配置します。実際、.java ファイルを対応するパスに置くこともでき、Java は使用時に自動的にコンパイルされます。
パッケージ全体 (つまり、com フォルダー) が現在の作業パスにある場合、次の TestAgain.java など、パッケージを使用するための特別な設定は必要ありません。
次のようにコードをコピーします。
com.vamei.society.* をインポートします。
パブリック クラス TestAgain
{
public static void main(String[] args)
{
人間 aperson = 新しい人間(180);
System.out.println(aperson.getHeight());
}
}
import はパスを識別するために使用されます。 import ステートメントを使用すると、対応するパスの下にクラスを導入できます。 ※社会フォルダ内の全授業の紹介を示します。 TestAgain では、Human クラスを直接使用します。
クラスへのフルパスを指定することもできます。これにより、次のように、名前は同じだがパスが異なるクラスを区別できます。
次のようにコードをコピーします。
パブリック クラス TestAgain
{
public static void main(String[] args)
{
com.vamei.society.Human aperson =
新しいcom.vamei.society.Human(180);
System.out.println(aperson.getHeight());
}
}
完全なクラスパスを提供するため、import ステートメントを使用する必要はありません。
パッケージが現在の作業パスに配置されていない場合は、パッケージの使用時に Java に通知する必要があります。たとえば、パッケージを /home/vamei/javapackage に配置すると、Human.class は /home/vamei/javapackage/com/vamei/society/Human.class に配置され、作業パスは /home/vamei になります。このようにして、パッケージは見つかりません。 1 つの方法は、javac および java を使用するときに -classpath を使用して、パッケージが配置されているフォルダー パスを指定することです。次に例を示します。
次のようにコードをコピーします。
$javac -classpath /home/vamei/javapackage:.TestAgain.java
$java -classpath /home/vamei/javapackage:.
/home/vamei/javapackage と作業パス (.) からパッケージを検索するだけです。 Java では、Human クラスを /home/vamei/javapackage から、TestAgain クラスを から見つけることができます。
さらに、システムの CLASSPATH 環境変数を設定し、毎回 -classpath オプションを入力しなくても、その変数に上記のパスを追加することもできます。
パッケージに似たメカニズムは、Python のインポート メカニズムなど、他の言語でも一般的です。それらはすべて、既存のプログラムをより良く整理して使用することを目的としています。パッケージを使用すると、Java プログラムを簡単に拡張したり、既存の Java プログラム ライブラリを使用したりできます。パッケージが .class ファイルを管理していることに注意してください。 Javaは「一度コンパイルすればどこでも実行できる」(一度コンパイルすればどこでも実行できる)として知られています。 .class ファイルは、Java 仮想マシン (JVM、Java 仮想マシン) を備えた任意のプラットフォームで実行でき、システムの違いによって引き起こされるプログラムの移植の問題を克服するのに役立ちます。
システム間の違いは非常に大きくなる場合があります。 C 言語でプログラムを作成する場合、さまざまなハードウェア条件に適応するために、ソース プログラムを各プラットフォームで再コンパイルする必要があります。 Java 仮想マシンはプラットフォームと Java ユニバースを接続し、ハードウェアとプログラミング ロジックの間の中間層を形成します。 JVM はハードウェアの違いを隠し、プログラマに「標準の」Java ユニバースを提供します。 .class ファイルは、この Java ユニバースで流通する通貨とみなすことができます。 JVM インフラストラクチャとパッケージ管理支援により、Java プログラムは優れた移植性を実現します。
要約する
パッケージ、インポート
デフォルトの権限: パッケージに表示されます
-クラスパス、クラスパス