Java のパッケージは、クラスのサブパッケージとインターフェイスのグループをカプセル化するメカニズムです。パッケージは次の目的で使用されます。
- 同じ名前のクラスが college.staff.cse.Employee や college.staff.ee.Employee などの異なるパッケージに存在できるようにすることで、名前の競合を防ぎます。
 - クラス インターフェイスやその他のコンポーネントの配置と使用を整理しやすくします。
 - 同じパッケージ内およびサブクラスからアクセスできる Protected メンバーに制御されたアクセスを提供します。デフォルトのメンバー (アクセス指定子なし) は、同じパッケージ内でのみアクセスできます。
 
関連するクラスをパッケージにグループ化することで、Java はデータのカプセル化を促進し、コードを再利用可能にして管理しやすくします。必要なクラスをパッケージからインポートするだけで、プログラムで使用できます。
カスタムパッケージの作成
ステップ 1: パッケージと Java ファイルを作成するディレクトリを作成します。
mkdir プログラミング
文字列を int に解析する
ステップ 2: 次に、ディレクトリを変更し、メインフォルダー内に別のフォルダーを作成します
cd プログラミング
mkdir Javaプログラミング
cd Javaプログラミング
mkdir配列
ステップ 3: 次に、空のテキスト ファイルを作成し、以下の Java コードを記述します。また、.java 拡張子 (TwoPointers.java) を付けたクラスと同じ名前で保存することを忘れないでください。
TwoPointers クラス。
Java
package JavaProgramming.arrays; // Main class present inside the package  public class TwoPointers {  public static void main(String[] args) {  System.out.println('Inside the package');  } } 
   
    注記:   プログラム ファイル内にパッケージ名を忘れずに追加してください。
ステップ 4: 次に、定義したフォルダーパスを使用してプログラムを実行します
javac srcJavaProgrammingarraysTwoPointers.java
java srcJavaProgrammingarraysTwoPointers.java
出力:
フォルダーパスを指定してプログラムを実行するフォルダー構造:
以下の画像は、Java のカスタム パッケージを視覚的に表現したものです。まず、Progamming という名前のフォルダーを作成し、その中に Javaprogramming パッケージを作成し、次に、という名前の別のサブパッケージを作成します。 配列 。次に、その中に、以下の図に示す Java クラス ファイルを作成します。
フォルダー構造Java パッケージの動作
ディレクトリ構造: パッケージ名とディレクトリ構造は密接に関連しています。たとえば、パッケージ名が college.staff.cse の場合、3 つのディレクトリは college Staff と cse になります。cse はスタッフ内、スタッフは大学内です。
命名規則 : パッケージ名はドメイン名の逆順に書かれます。 org.geeksforgeeks.practice。大学では、慣例は次のようになります。
- college.tech.cse
 - college.tech.ee
 - 大学、美術史
 
例:
java.util.* をインポートします。
ここで、util は Java パッケージ内に作成されるサブパッケージです。
パッケージ内のクラスへのアクセス
Java では、次のいずれかの方法を使用してパッケージからクラスをインポートできます。
1. 特定のクラスをインポートする :
java.util.Vectorをインポートします。
これにより、java.util パッケージから Vector クラスのみがインポートされます。
クイックソートアルゴリズム
2. パッケージからすべてのクラスをインポートする :
java.util.* をインポートします。
これにより、java.util パッケージからすべてのクラスとインターフェイスがインポートされますが、サブパッケージは含まれません。
例: Vectorクラスをインポートする
Javaimport java.util.Vector; public class Geeks {    public Geeks() {    // java.util.Vector is imported We are able to access it directly in our code.  Vector v = new Vector();    java.util.ArrayList l = new java.util.ArrayList();  l.add(3);  l.add(5);  l.add(7);    System.out.println(l);  }  public static void main(String[] args) {      new Geeks();  } } 
   出力
[3 5 7]
注記:
- インポートパッケージを使用します。*;パッケージ内のすべてのクラスをインポートしますが、そのサブパッケージからのクラスはインポートしません。
 - 2 つのパッケージに同じ名前のクラスがある場合 (例: java.util.Date と my.package.Date)、競合を避けるために完全修飾名を使用します。
 
java.util.Dateをインポートします。
my.package.Date をインポートします。
Java パッケージの種類
- 組み込みパッケージ
 - ユーザー定義のパッケージ
 
1. 組み込みパッケージ
これらのパッケージは、Java の一部である多数のクラスで構成されています。 API 一般的に使用される組み込みパッケージの一部は次のとおりです。
- java.lang : 言語サポート クラス (プリミティブ データ型の数学演算を定義するクラスなど) が含まれます。このパッケージは自動的にインポートされます。
 - java.io: 入出力操作をサポートするためのクラスが含まれています。
 - java.util : リンク リスト ディクショナリやサポートなどのデータ構造を実装するユーティリティ クラスが含まれています。日付/時刻操作の場合。
 - java.アプレット: アプレットを作成するためのクラスが含まれています。
 - java.aut: グラフィカル ユーザー インターフェイス (ボタン、メニューなど) のコンポーネントを実装するためのクラスが含まれます。 6)
 - java.net: ネットワーク操作をサポートするためのクラスが含まれています。
 
2. ユーザー定義パッケージ
これらはユーザーによって定義されるパッケージです。
1. パッケージを作成します。
まず、ディレクトリ myPackage を作成します (名前はパッケージの名前と同じである必要があります)。次に、最初のステートメントがパッケージ名である MyClass をディレクトリ内に作成します。
例:
Javapackage myPackage; public class MyClass {  public void getNames(String s)  {   System.out.println(s);   } } 
   
    2. プログラム内のクラスを使用します。   
ここで使用するのは、 私のクラス 私たちのプログラムのクラス。
Java import myPackage.MyClass; public class Geeks {  public static void main(String args[]) {     // Initializing the String variable with a value   String s = 'GeeksforGeeks';    // Creating an instance of class MyClass in the package.  MyClass o = new MyClass();    o.getNames(s);  } } 
   
    注記:   MyClass.java はパッケージの一部であるため、myPackage ディレクトリ内に保存する必要があります。  
Java での静的インポート
Java の静的インポートは、静的メンバーへのアクセスを簡素化するものであり、ユーザー定義パッケージの広範な議論から切り離されています。
静的インポート Java プログラミング言語 (バージョン 5 以降) で導入された機能で、クラス内でパブリックとして定義されたメンバー (フィールドおよびメソッド) を許可します。 静的 フィールドが定義されているクラスを指定せずに Java コードで使用されます。
例:
Javaimport static java.lang.System.*; class Geeks {  public static void main(String args[]) {    // We don't need to use 'System.out' as imported using static.  out.println('GeeksforGeeks');  } } 
   出力
GeeksforGeeks
名前の競合の処理
2 つのパッケージに同じ名前のクラスが含まれている場合 (例: java.util.Date と java.sql.Date)、競合を避けるために完全なパッケージ名を指定します。
アスキーテーブルJava
java.util.* をインポートします。
インポート java.sql.*;
//Date クラスを使用すると、コンパイル時エラーが発生します。
今日の日付。 //エラー-- java.util.Date または java.sql.Date?
コンパイラは、どの Date クラスが必要かを判断できません。この問題は、特定の import ステートメントを使用することで解決できます。
java.util.Dateをインポートします。
インポート java.sql.*;
両方の Date クラスが必要な場合は、そのクラスの新しいオブジェクトを宣言するたびに完全なパッケージ名を使用する必要があります。例えば:
java.util.Date DeadLine = 新しい java.util.Date();
今日の java.sql.Date = 新しい java.sql.Date();Pythonの剰余演算子
ディレクトリ構造とクラスパス
パッケージ名はディレクトリ構造に対応します。たとえば、パッケージ com.zzz.project1.subproject2 内のクラス Circle は次のように格納されます。
$BASE_DIR/com/zzz/project1/subproject2/Circle.class
- ここ $BASE_DIR はパッケージのベースディレクトリを表します。
 - パッケージ名の「ドット」は、ファイル システムのサブディレクトリに対応します。
 - ベースディレクトリ ( $BASE_DIR ) は、ファイル システム内のどこにでも配置できます。
 - したがって、Java コンパイラとランタイムは、クラスを見つけるために $BASE_DIR の場所を通知される必要があります。
 - これは、と呼ばれる環境変数によって実現されます。 クラスパス 。
 - CLASSPATH は、コマンド シェルが実行可能プログラムを検索するために使用する別の環境変数 PATH に似ています。
 
クラスパスの設定
CLASSPATH は、次のいずれかの方法で設定できます。
- CLASSPATH は、Windows の手順に従って環境に永続的に設定できます。
 
[コントロール パネル] -> [システム] -> [詳細設定] -> [環境変数] に移動します。
- 「システム環境変数」を選択して、システム上のすべてのユーザーに CLASSPATH を適用します。
 - 現在ログインしているユーザーにのみ適用するには、「ユーザー変数」を選択します。
 - CLASSPATH の編集または作成: CLASSPATH がすでに存在する場合は選択して「編集」をクリックするか、存在しない場合は「新規」をクリックします。
 - CLASSPATH の詳細を入力します。 「変数名」フィールドに「CLASSPATH」と入力します。 「変数値」フィールドにディレクトリと JAR ファイルをセミコロンで区切って入力します。
 - 「変数値」フィールドに、ディレクトリと JAR ファイルをセミコロンで区切って入力します。例:
 
.c:javaprojectclasses;d:tomcatlibservlet-api.jar
- ドット (
.) は現在の作業ディレクトリを表します。 - CLASSPATH の現在の設定を確認するには、次のコマンドを発行します。
 
> クラスパスの設定
次のコマンドを発行することで、特定の CMD シェル セッションに対して CLASSPATH を一時的に設定できます。
> SET CLASSPATH=.;c:javaprojectclasses;d:tomcatlibservlet-api.jar
CLASSPATH 環境変数を使用する代わりに、たとえば javac および java コマンドのコマンドライン オプション -classpath または -cp を使用することもできます。
> java –classpath c:javaprojectclasses com.abc.project1.subproject2.MyClass3
ユーザー定義パッケージの図: 最初のパッケージの作成: ファイル名 – ClassOne.java
Javapackage package_name; public class ClassOne {  public void methodClassOne()  {  System.out.println('Hello there its ClassOne');  } } 
 2 番目のパッケージの作成: ファイル名 – ClassTwo.java
Javapackage package_one; public class ClassTwo {  public void methodClassTwo()  {  System.out.println('Hello there i am ClassTwo');  } } 
 作成した両方のパッケージを利用する: ファイル名 – Testing.java
Javaimport package_name.ClassOne; import package_one.ClassTwo; public class Testing {  public static void main(String[] args)  {  ClassTwo a = new ClassTwo();  ClassOne b = new ClassOne();  a.methodClassTwo();  b.methodClassOne();  } } 
 次に、パッケージとテスト クラス ファイルの両方のディレクトリ構造を見てみましょう。
  
パッケージのコンテキストでのアクセス修飾子
-     公共:   を持ったメンバー
public修飾子は、アクセスするクラスが同じパッケージ内にあるかどうかに関係なく、どこからでもアクセスできます。 。 - 保護中: protected 修飾子を持つメンバーは、同じパッケージ内のサブクラス内でアクセス可能です
 - デフォルト: 修飾子のないメンバーは、同じパッケージ内でのみアクセス可能です
 -     プライベート:   を持ったメンバー
private修飾子は同じクラス内でのみアクセスできます。同じパッケージのサブクラスまたは異なるパッケージ内のクラスからはアクセスできません。