Javaのプライベートコンストラクタ:例で説明されたユースケース
公開: 2021-04-09目次
序章
Javaのプライベートコンストラクターは、オブジェクトの作成を制限するために使用されます。 これは、静的メンバー専用クラスで使用される特別なインスタンスコンストラクターです。 コンストラクターがプライベートとして宣言されている場合、そのオブジェクトには、宣言されたクラス内からのみアクセスできます。 コンストラクタークラスの外部からそのオブジェクトにアクセスすることはできません。
プライベートコンストラクターのユースケース
Javaのプライベートコンストラクタは、クラス内からのみアクセスされます。 他のクラスからプライベートコンストラクタにアクセスすることはできません。 オブジェクトがまだ初期化されていない場合は、パブリック関数を記述してプライベートインストラクターを呼び出すことができます。 オブジェクトがすでに初期化されている場合は、そのオブジェクトのインスタンスのみを返すことができます。 Javaのプライベートコンストラクタには、次のユースケースがあります。
- 静的メンバーのみのクラスで使用できます。
- 静的ユーティリティまたは定数クラスで使用できます。
- シングルトンクラスを提供するために使用できます。
- これを使用して、ファクトリメソッドを利用した作成などの名前を割り当てることができます。
- サブクラス化を防ぐために使用できます。
シングルトンクラス
Javaのプライベートコンストラクタは、シングルトンクラスを作成するために使用されます。 シングルトンクラスは、宣言されたクラスのオブジェクトの数を1つに制限するJavaのクラスです。 Javaのプライベートコンストラクターは、一度に1つのオブジェクトのみが作成されることを保証します。 宣言されたクラス内のクラスインスタンスを制限して、宣言されたクラスの外部でクラスインスタンスを作成できないようにします。 ネットワークおよびデータベース接続の概念でシングルトンクラスを使用できます。
例1:次の例は、Javaのプライベートコンストラクターがシングルトンクラスのオブジェクトの数を制限する方法を示しています。
java.io.*をインポートします。 クラスnewTestClass{ static newTestClass object = null; public int a = 20; private newTestClass(){ } //プライベートコンストラクタを作成しました static public newTestClass displayInstance() / ** * displayInstance()は、インスタンスの作成に使用するパブリックメソッドです。 *このメソッドを呼び出して、クラスの外部からこれらのインスタンスにアクセスします。 * / {{ if(object == null) object = new newTestClass(); //シングルトンクラスオブジェクトが作成されます オブジェクトを返します。 } } パブリッククラスSingletonClass{ public static void main(String args []){ newTestClass instance1 = newTestClass.displayInstance(); // publicメソッドを呼び出して、シングルトンクラスのインスタンスを表示します newTestClass instance2 = newTestClass.displayInstance(); // publicメソッドを呼び出して、シングルトンクラスのインスタンスを表示します instance1.a = instance1.a + 26; System.out.println(“作成されたインスタンス1の値は次のとおりです=” + instance1.a); System.out.println(“作成されたインスタンス2の値は次のとおりです=” + instance2.a); } } |
出力
作成されたインスタンス1の値は次のとおりです=46 作成されたインスタンス2の値は次のとおりです=46 |
上記のプログラムでは、instance1オブジェクトの値を更新すると、インスタンス2の値が自動的に更新されます。 この観察結果は、instance1とinstance2の両方が同じオブジェクトを参照していることを示しています。
例2:次の例は、Javaのプライベートコンストラクターが一度に作成されるオブジェクトが1つだけであることを保証する方法を示しています。
//シングルトンクラス実装用のJavaプログラム java.io.*をインポートします。 パブリッククラスnewTestClass{ private static newTestClass var = null; プライベートnewTestClass(){ //プライベートコンストラクタはクラス内でアクセスできます } public static newTestClass testObject(){ //このメソッドは、一度に1つのオブジェクトのみが作成されることを保証します if(var == null){ var = new newTestClass(); } varを返します。 } public void display(){ System.out.println( "これは、シングルトンクラスを使用するプライベートコンストラクターの例です。"); } public static void main(String args []){ newTestClass newObject = newTestClass.testObject(); newObject.display(); } } |
出力
これは、シングルトンクラスを使用するプライベートコンストラクターの例です。
例2:クラスインスタンスの数を制限するJavaのプライベートコンストラクタ。
この例は、コンストラクターをプライベートとして宣言することにより、クラスインスタンスの数を制限する方法を示しています。
パブリッククラスrestrictInstanceCreationClass{ public static void main(String [] args){ RestrictInstance obj; int a = 1; while(a <= 20) {{ obj = RestrictInstance.getLimInstance(); a ++; } } } クラスRestrictInstance{ public static int varCount = 0; / ** *カウントを増やすプライベートコンストラクターを作成します *各インスタンス作成後のvarCount変数の * / private RestrictInstance(){ varCount ++; System.out.println(“インスタンス番号” + varCount +”が作成されます。”); }
public staticsynchronized RestrictInstance getLimInstance(){ if(varCount <5){ 新しいRestrictInstance();を返します。 } System.out.println( "インスタンスの最大制限に達しました。これ以上インスタンスを作成することはできません。"); System.gc(); nullを返します。 } / ** *インスタンスを削除してカウントを減らします *varCount変数の * / public void finalise() {{ System.out.println( "インスタンスが削除されました。"); varCount–; }} |
出力
インスタンス番号1が作成されます。 インスタンス番号2が作成されます。 インスタンス番号3が作成されます。 インスタンス番号4が作成されます。 インスタンス番号5が作成されます。 インスタンスの最大制限に達しました。 これ以上インスタンスを作成することはできません。 インスタンスの最大制限に達しました。 これ以上インスタンスを作成することはできません。 インスタンスの最大制限に達しました。 これ以上インスタンスを作成することはできません。 インスタンスの最大制限に達しました。 これ以上インスタンスを作成することはできません。 インスタンスが削除されます。 インスタンスが削除されます。 インスタンスが削除されます。 インスタンスが削除されます。 インスタンスの最大制限に達しました。 これ以上インスタンスを作成することはできません。 インスタンス番号1が作成されます。 インスタンス番号2が作成されます。 インスタンス番号3が作成されます。 インスタンス番号4が作成されます。 インスタンス番号5が作成されます。 インスタンスの最大制限に達しました。 これ以上インスタンスを作成することはできません。 インスタンスの最大制限に達しました。 これ以上インスタンスを作成することはできません。 インスタンスの最大制限に達しました。 これ以上インスタンスを作成することはできません。 インスタンスの最大制限に達しました。 これ以上インスタンスを作成することはできません。 インスタンスの最大制限に達しました。 これ以上インスタンスを作成することはできません。 インスタンスの最大制限に達しました。 これ以上インスタンスを作成することはできません。 インスタンスの最大制限に達しました。 これ以上インスタンスを作成することはできません。 インスタンスの最大制限に達しました。 これ以上インスタンスを作成することはできません。 インスタンスの最大制限に達しました。 これ以上インスタンスを作成することはできません。 インスタンスの最大制限に達しました。 これ以上インスタンスを作成することはできません。 インスタンスが削除されます。 インスタンスが削除されます。 インスタンスが削除されます。 インスタンス番号1が作成されます。 インスタンス番号2が作成されます。 インスタンス番号3が作成されます。 インスタンス番号4が作成されます。 インスタンス番号5が作成されます。 |
世界のトップ大学からオンラインでソフトウェアコースを学びましょう。 エグゼクティブPGプログラム、高度な証明書プログラム、または修士プログラムを取得して、キャリアを早急に進めましょう。
結論
この記事で使用されているコードは、説明のみを目的としています。 要件に応じて、例に示されているステートメントを変更できます。 このブログでは、Javaのプライベートコンストラクターがシングルトンクラスのオブジェクトの数をどのように制限するかについて説明しました。
コードを試して、 Javaコンストラクターの知識を強化することができます。 Javaについて深く理解したい場合は、この分野の専門知識を習得するために働く専門家向けに設計された、フルスタック開発コースのupGradExecutivePGプログラムを確認してください。
プログラミングのコンストラクターとは何ですか?
プログラミングのコンストラクターは、オブジェクトが初期化されるときに自動的に呼び出されるメソッドです。 コンストラクターの目的は、オブジェクトを初期化することです。 コンストラクターは常にパブリックである必要があり、リターン型なしで宣言されます。 コンストラクターは、オブジェクトを初期化し、1回だけ実行できる他のタスクを実行するために使用されます。 コンストラクターは、クラスの初期化を実行するため、つまり、クラスを作成するタスクを実行するためにも使用されます。
Javaのコンストラクターのタイプは何ですか?
Javaには5種類のコンストラクタがあります。 引数なしのコンストラクター:デフォルトの実装があり、クラスがメモリーにロードされるときに実行されます。 引数のないコンストラクターを持たないクラスは、finalとして宣言する必要があります。 デフォルトのコンストラクター:このコンストラクターは、クラスがJavaで記述されている場合に作成され、すべてのクラスの変数(属性)をデフォルト値(ゼロまたはnull)に初期化するために使用されます。 パラメータ化されたコンストラクタ:このコンストラクタは、いくつかの値からいくつかの変数を初期化するために使用されます。 戻り値のないコンストラクター:いくつかの値からいくつかの変数を初期化するために使用されます。 戻り値を持つコンストラクター:いくつかの値からいくつかの変数を初期化するために使用され、値とともに戻ります。
Javaのプライベートコンストラクターとは何ですか?
プライベートコンストラクターを使用して、不変のクラスを作成できます。 プライベートコンストラクターを使用せずに、クラスfinalを宣言し、すべての属性をfinalとして作成することで不変クラスを作成できます(例:private final String name;)。 プライベートコンストラクタは、クラスのクライアントオブジェクトから直接呼び出すことはできません。 それらは、クラスのメソッドによってのみ内部的に呼び出すことができます(プライベートの場合でも)。 1つ以上のパラメーターを持つプライベートコンストラクターを持つことができます。 コンストラクターの戻り型をプリミティブブール値にすることはできません。 文字列またはクラスのいずれかです。