JavaパッケージはJava クラスを名前空間に編成し、[1] それに含まれる各型に固有の名前空間を提供します。同じパッケージ内のクラスは、お互いのパッケージプライベートメンバーと保護されたメンバーにアクセスできます。
一般的に、パッケージには、クラス、インターフェース、列挙、レコード、注釈型などの型を含めることができます。パッケージを使用すると、開発者はクラス (およびインターフェース) をグループ化できます。これらのクラスはすべて何らかの形で関連しており、特定のアプリケーションに関係していたり、特定の一連のタスクを実行したりする場合があります。プログラマーは通常、同じカテゴリに属するクラスや同様の機能を提供するクラスを整理するためにパッケージを使用します。
パッケージの使用
Java ソース ファイルでは、このファイルのクラスが属するパッケージは、
package キーワードで指定されます。このキーワードは通常、ソース ファイルの最初のキーワードです。ソース ファイルには、最大 1 つのパッケージ宣言を表示できます。
パッケージjava.awt.event ;
Javaソースファイル内でパッケージのクラスを使用するには、宣言を使用してパッケージからクラスをインポートすると便利ですimport。次の宣言
java.awt.event.*をインポートします。
はパッケージからすべてのクラスをインポートしますjava.awt.eventが、次の宣言は
java.awt.event.ActionEventをインポートします。
ActionEventパッケージからクラスのみをインポートします。これらのいずれかのインポート宣言の後、ActionEventクラスは単純なクラス名を使用して参照できます。
アクションイベントmyEvent =新しいアクションイベント();
クラスは、クラスの完全修飾名を使用することで、インポート宣言なしで直接使用することもできます。たとえば、
java.awt.event.ActionEvent myEvent = new java.awt.event.ActionEvent ( ) ;
事前の輸入宣言は必要ありません。
パッケージ全体のJavadocと注釈
パッケージ全体を説明するドキュメントは、`package-info.java` という名前のファイルにJavadocとして記述されます。このファイルは、パッケージのすべてのクラスで使用される注釈を記述する場所でもあります。 [2]
名前のないパッケージ
パッケージ宣言が使用されていない場合、クラスは名前のないパッケージに配置されます。名前のないパッケージ内のクラスは、他のパッケージ内のクラスからインポートできません。[3]公式のJavaチュートリアルでは、これを行わないようにアドバイスしています。
- 一般的に、名前のないパッケージは、小規模または一時的なアプリケーション、または開発プロセスを開始したばかりの場合にのみ使用されます。それ以外の場合、クラスとインターフェースは名前付きパッケージに属します。[4]
パッケージアクセス保護
パブリックメンバーとクラスはどこからでも参照可能で、プライベートメンバーは同じクラス内でのみ参照可能です。パッケージ内のクラスは、デフォルト(パッケージプライベート)アクセスで宣言されたクラスとメンバー、およびアクセス修飾子で宣言されたクラスメンバーにアクセスできます。デフォルト(パッケージプライベート)アクセスは、クラスまたはメンバーが、またはprotectedとして宣言されていない場合に適用されます。対照的に、他のパッケージ内のクラスは、デフォルトアクセスで宣言されたクラスとメンバーにアクセスできません。ただし、として宣言されたクラスメンバーは、同じパッケージ内のクラス、および宣言クラスのサブクラスである他のパッケージ内のクラスからアクセスできます。[5]publicprotectedprivateprotected
JARファイルの作成
JARファイルはjarコマンドラインユーティリティで作成されます。コマンド
jar cf myPackage.jar *.class
すべての .class ファイルを JAR ファイルmyPackage.jarに圧縮します。コマンド ラインの 'c' オプションは、jar コマンドに「新しいアーカイブを作成する」ように指示します。' f ' オプションは、ファイルを作成するように指示します。ファイル名は、JAR ファイルの内容の前に続きます。
パッケージの命名規則
パッケージは通常、階層的な命名パターンを使用して定義され、階層内のいくつかのレベルはピリオド ( .「ドット」と発音) で区切られます。命名階層の下位にあるパッケージは、階層の上位にある対応するパッケージの「サブパッケージ」と呼ばれることがよくありますが、パッケージ間には意味的な関係はほとんどありません。Java 言語仕様では、公開された 2 つのパッケージが同じ名前を持つことがないように、パッケージの命名規則を定めています。命名規則では、一意のパッケージ名を作成する方法を記述しているため、広く配布されるパッケージには一意の名前空間が与えられます。これにより、パッケージを個別に、簡単に、自動的にインストールしてカタログ化できます。
一般的に、パッケージ名は組織のトップレベルドメイン名で始まり、次に組織のドメイン、そしてサブドメインが逆順にリストされます。組織はその後、パッケージに特定の名前を選択できます。パッケージ名のその後の構成要素は、組織独自の内部命名規則によって異なります。[6]
たとえば、カナダの MySoft という組織が分数を扱うパッケージを作成する場合、そのパッケージにca.mysoft.fractionsという名前を付けると、分数パッケージが別の会社が作成した同様のパッケージと区別されます。ドイツの MySoft という会社も分数パッケージを作成し、de.mysoft.fractionsという名前を付けると、これら 2 つのパッケージ内のクラスは一意の別の名前空間で定義されます。
パッケージ名の曖昧さを解消するための完全な規則と、インターネットドメイン名をパッケージ名として直接使用できない場合のパッケージの命名規則は、Java言語仕様のセクション7.7に記載されています。[7]
Java SE 8のコアパッケージ
モジュール
Java 9 (2017 年 9 月 21 日リリース)では、Project Jigsaw の開発努力の結果として、パッケージのコレクションの一種である「モジュール」のサポートが実装されました。「モジュール」は以前は「スーパーパッケージ」と呼ばれ、もともと Java 7 向けに計画されていました。
モジュールは、モジュールのソースファイル階層のルートにあるmodule-info.javaというファイルに宣言を配置して依存関係を記述します。Java 9以降、JDK はコンパイル時と実行時の両方でモジュールの依存関係をチェックできます。JDK 自体はJava 9用にモジュール化されています。[8] [9]
参考文献
- ^ James Gosling、Bill Joy、Guy Steele、Gilad Bracha、『Java 言語仕様、第 3 版』、ISBN 0-321-24678-0、2005年。序文には、「第 7 章では、Modula のモジュールに似たパッケージに編成されたプログラムの構造について説明します」と記載されています。
- ^ 「第7章 パッケージとモジュール」。docs.oracle.com 。 2021年12月10日閲覧。
- ^ 「第 7 章 パッケージ」。Docs.oracle.com。2013年 9 月 15 日閲覧。
- ^ 「パッケージの作成と使用 (Java™ チュートリアル > Java 言語の学習 > パッケージ)」。docs.oracle.com。
- ^ 「クラスのメンバーへのアクセスの制御 (Java™ チュートリアル > Java 言語の学習 > クラスとオブジェクト)」。docs.oracle.com。
- ^ Javaプログラミング言語のコード規約: 9. 命名規則
- ^ 「パッケージ」。docs.oracle.com。
- ^ 「JDK モジュールの概要」。Oracle Corporation。2015年 10 月 23 日。2015 年 12 月 8 日時点のオリジナルよりアーカイブ。2015年 11 月 29 日閲覧。
- ^ 「Java 9 モジュールについて」。Oracle Corporation 2017 年 10 月 1 日。2022 年 10 月 4 日に閲覧。
外部リンク
- Java SE 19 API Javadocs
