Javaでプライベートコンストラクタを実装する方法



この記事では、Javaのプライベートコンストラクターの詳細で包括的な知識と、その使用例を紹介します。

コンストラクター オブジェクトの状態を初期化するために使用されます。メソッドと同様に、コンストラクターはステートメントのコレクションを保持することもできます。これは、命令としか呼ばれません。この記事では、プライベートコンストラクタについて説明します。 次の順序で:

Javaでのコンストラクターの概要

コンストラクターは、オブジェクトの作成時に実行されます。コンストラクターとそのアプリケーションをよりよく理解するには、ボックスをクラスと考えてください。 Boxクラスには、いくつかのクラス変数(つまり、長さ、幅、高さ)があると想定されています。ただし、オブジェクトの作成時に(つまり、ボックスがコンピュータのメモリに存在する)、その寸法量に値が定義されていないボックスが存在する可能性があります。





明らかに、いいえ。

したがって、オブジェクトの作成時にクラス変数に値を割り当てるコンストラクタが導入されています。これは、プログラマーまたはJava自体が明示的に行うことができます。 Java自体によって実行される場合、デフォルトのコンストラクターと呼ばれます。



プライベートにされたコンストラクターにコーダーによって提供されたアクセス指定子を持つメソッドは、クラス自体の内部でのみアクセスできることを理解する必要があります。

Javaのプライベートコンストラクタ

シングルトンクラス

そのクラスのオブジェクトの数が1つに制限されている場合、名前自体から、クラスをシングルトンと呼ぶことができます。このような場合、クラスに複数のオブジェクトを含めることはできません。シングルトンクラスは、ネットワーキングやデータベース接続などの概念で徹底的に使用されます。シングルトンクラスは プライベートクラス



クラスのインスタンスを抽出する別の方法と、結果をフェッチするreturnメソッドが必要です。以下は同じものの適切な図です。最初の絵文字は、「a.x」の値が20に等しく、「b.x」の値も20になる可能性のある結果を示しています。コードでは、シングルトンプライベートクラスを定義していますが、そのコンストラクターにはクラスの外部からアクセスできません。

a.xの値= 20

b.xの値= 20

//プライベートコンストラクタを使用したシングルトンパターンの実装を示す// Javaプログラム。 import java.io. * class MySingleton {static MySingleton instance = null public int x = 10 //クラスの外部からプライベートコンストラクタにアクセスすることはできませんprivateMySingleton(){} //ユーザーにインスタンスを提供するファクトリメソッドstaticpublic MySingleton getInstance(){if(instance == null)instance = new MySingleton()return instance}} //ドライバークラスクラスMain {public static void main(String args []){MySingleton a = MySingleton.getInstance()MySingleton b = MySingleton.getInstance()ax = ax + 10 System.out.println( 'axの値=' + ax)System.out.println( 'bxの値=' + bx)}}

Javaでのプライベートコンストラクタの影響

プライベートコンストラクターは、別のクラスから派生したクラスにアクセスできません。したがって、プライベートコンストラクターを呼び出すパブリック関数を指定する必要があります。オブジェクトが初期化されていない場合、または初期化されている場合はインスタンスをオブジェクトに返送する必要があります。これは、初期化できないオブジェクトに特に役立ちます。プライベートコンストラクターは、次の場合に使用されます。

HTMLでアラートを作成する方法
  • 静的メソッドとメンバーのみを持つそれぞれのクラス。
  • 静的な最終メンバー(定数)のみを広く使用している特定のクラス。
  • シングルトンを組み込む。
  • ファクトリメソッドを組み込むため。

タイプセーフな列挙を利用するため。

内部コンストラクタチェーン

内部コンストラクターチェーンとは、コンストラクターが同じクラスの別のコンストラクターを呼び出す場合、コンストラクターチェーンと呼ばれることもあります。このキーワードを使用して、クラスの別のコンストラクターを呼び出すのは私たちの義務です。場合によっては、クラス変数のデフォルト値を定義するために使用されます。また、別のコンストラクター呼び出しがコードブロックの最初のステートメントである必要があることにも注意してください。

さらに、無限ループを作成する再帰呼び出しがあってはなりません。ここで、Javaプログラムでのコンストラクターチェーンの例を見てみましょう。

パッケージcom.journaldev.constructorpublic class Employee {private int id private String name public Employee(){this( 'John Doe'、999)System.out.println( 'Default Employee Created')} public Employee(int i){ this( 'John Doe'、i)System.out.println( 'Employee Created with Default Name')} public Employee(String s、int i){this.id = i this.name = s System.out.println( 'Employee Created')} public static void main(String [] args){Employee emp = new Employee()System.out.println(emp)Employee emp1 = new Employee(10)System.out.println(emp1)Employee emp2 = new Employee( 'Pankaj'、20)System.out.println(emp2)} @Override public String toString(){return'ID = '+ id +'、Name = '+ name} public int getId(){return id } public void setId(int id){this.id = id} public String getName(){return name} public void setName(String name){this.name = name}}

シングルトンクラスのデザインパターン

  • クラスレベルのメンバー(熱心な初期化方法):

  1. まず、シングルトンクラスのプライベート定数静的インスタンスを作成します。

  2. 次に、クラスメンバーインスタンスとして作成したシングルトンクラスのオブジェクトを返す静的メソッドを記述します。

    Javaでtostringはどういう意味ですか
  3. 静的メンバーをパブリックとしてマークして、定数静的インスタンスに直接アクセスすることができます。

  4. シングルトンクラスは、インスタンス化の点で通常のJavaクラスとは異なります。通常のクラスではコンストラクターが使用されますが、シングルトンクラスではget Instance()メソッドを使用します。

  • クラスレベルのメンバー(レイジー初期化メソッド):

  1. まず、コンストラクターをプライベートとして開始します。

  2. 次に、このシングルトンクラスのプライベート静的インスタンスを作成します。インスタンス化しないように注意してください。

  3. 次に、静的メソッドを記述します。このメソッドは、静的インスタンスメンバーのnullをチェックし、インスタンスを開始します。最後に、シングルトンクラスのオブジェクトを返します。

  • クラスレベルのメンバー(ダブルロックメソッドを使用したレイジー初期化):

インスタンスがnullのときに、両方が「if」ステートメント内に同時に入る2つのスレッドが実行されているとします。ここで、一方のスレッドは同期ブロックに入ってインスタンスを作成し、もう一方のスレッドはブロックされます。最初のスレッドが同期ブロックに存在するため、キュー内のスレッドは別のシングルトンオブジェクトを作成します。 2番目のスレッドが同期ブロックに入ると、インスタンスがnullでないかどうかのチェックに失敗することに注意してください。

  • ネストされた内部クラスの使用(Lazy Loadメソッド):

ここでは、Java言語仕様(JLS)に基づいています。 Java仮想マシンは、静的データメンバーをオンデマンドでのみロードします。したがって、シングルトンクラスは最初にJVMによってロードされます。したがって、クラスには静的データメンバーはありません

シングルトンクラスホルダーはSINGLE_INSTANCEをロードしません。 getIntanceメソッドを呼び出すと、これだけが発生します。 JLSは、クラスの初期化の実行を保証します。ロードおよび初期化のための静的getInstance()メソッドでの明示的な同期の準備。初期化によって静的変数SINGLE_INSTANCEが順次作成されるため、getInstance()のすべての同時呼び出しは、同期のオーバーヘッドなしで同じように戻ります。

  • 列挙型を使用する

上記のすべてのアプローチがすべての場合において完全な解決策であるとは限りません。上記の実装の複数のインスタンスは、リフレクションを使用して作成できます。どちらのシナリオでも、プライベートコンストラクターをバイパスして、複数のインスタンスを作成できます。したがって、新しいアプローチは、列挙型を使用してシングルトンクラスを作成することです。列挙型フィールドはコンパイルされた時定数であるため、列挙型のインスタンスです。これらは、列挙型が初めて参照されるときに作成されます。

これで、Javaのプライベートコンストラクターの記事は終わりです。プライベートコンストラクターと、それらをJavaで使用する方法について理解していただければ幸いです。

チェックしてください 25万人以上の満足した学習者のネットワークを持つ信頼できるオンライン学習会社であるEdurekaが世界中に広がっています。 EdurekaのJavaJ2EEおよびSOAトレーニングおよび認定コースは、Java開発者になりたい学生および専門家向けに設計されています。このコースは、Javaプログラミングをすぐに開始できるように設計されており、HibernateやSpringなどのさまざまなJavaフレームワークに加えて、コアと高度なJavaの両方の概念についてトレーニングします。

クラスオブジェクトの配列java

質問がありますか?この「Javaチュートリアル」ブログのコメントセクションでそれについて言及してください。できるだけ早くご連絡いたします。