ホームページ  >  記事  >  Java  >  Javaでのプライベートコンストラクタの使い方を詳しく解説

Javaでのプライベートコンストラクタの使い方を詳しく解説

黄舟
黄舟オリジナル
2017-09-14 10:48:521821ブラウズ

この記事では主に Java プライベート コンストラクターの意味とキーワードを紹介し、例を通してその使用方法を示します。必要な友人はそれを参照してください。

Java クラスの特別なメンバーとして、コンストラクターは制御するキーワードを設定することもできます。彼らのアクセス権。ほとんどの場合、コンストラクターをパブリック メンバーとして設定します。つまり、キーワードが記述されていない場合、デフォルトではアクセス権もパブリックになります。このようにして、クラスの新しいオブジェクトを作成すると、オブジェクトの作成後にコンストラクターが自動的に呼び出されます。もちろん、フィールド初期化子と初期化がある場合は、他のクラス メンバーがデフォルトの初期値に設定された後に発生します。ブロックの場合、この後にコンストラクターの呼び出しが行われます。コンストラクターの主な機能は、 new がオブジェクトへの参照を返す前にオブジェクトを初期化することです。

本題に入りましょう、民間建設業者とは何ですか?いわゆるプライベート コンストラクターは、private キーワードを使用して宣言されたコンストラクター、つまり private キーワードを使用して宣言されたコンストラクターです。 。一般的なパブリックコンストラクタとの最大の違いは、アクセス権限がプライベートであるため、それを含むクラスからのみアクセスでき、クラス外から呼び出すことができないため、オブジェクトの生成を防ぐことができることです。したがって、クラスにプライベート コンストラクターが 1 つだけあり、パブリック コンストラクターがない場合、オブジェクトは生成できません。

クラスのコンストラクターはプライベートであるため、このクラスはインスタンス化または継承できません。 「Effective Java」の第 3 条: プライベート コンストラクターまたは列挙を使用して、シングルトン プロパティを強化します。いわゆるシングルトン属性は、一度だけインスタンス化されるクラスを指します。第 4 条: プライベート コンストラクターを通じて非インスタンス化機能を強化します。 Java でシングルトンを実装するには 2 つの方法があります:


public class Elvis {
 public static final Elvis INSTANCE = new Elvis();
 private Elvis() {}
}


public class Elvis {
 private static final Elvis INSTANCE = new Elvis();
 private Elvis() {}
 public static Elvis getInstance() { return INSTANCE;}
}

方法 1: プライベート コンストラクターは、パブリック静的最終フィールド Elvis.INSTANCE をインスタンス化するために 1 回だけ呼び出すことができます。 1 つの Elvis インスタンスになります (特権クライアントは、AccessibleObject.setAccessible メソッドを使用して、リフレクション メカニズムを通じてプライベート コンストラクターを呼び出すことができます)

方法 2: 静的メソッド getInstance を使用して、作成されることのない同じオブジェクトへの参照を返します。その他の Evlis インスタンス。

プライベート コンストラクターが必要なのはなぜですか? クラスをインスタンス化できない場合にこのクラスのメソッドを使用するにはどうすればよいですか?

プライベート コンストラクターの存在により、特定のクラスのインスタンス化やサブクラス化が妨げられる場合があります。これらのクラスは通常、java.lang.Math などのツール クラスです。これらのクラスのメソッドにアクセスするには、パブリック静的メソッドを定義できます。 A.methon()


public class A {
 private A() {}
 public static void methon() {}    
}

java.lang.Math でのプライベート コンストラクターの使用などを実装するには、プライベート コンストラクターを使用して Math クラスが Final として定義され、そのメソッドが Static であることがわかります。したがって、そのメソッドの呼び出しには Math.sin(x) のみが必要です:


public final class Math {
 private Math() {}
 public static final double E = 2.7182818284590452354;
 public static final double PI = 3.14159265358979323846;
 public static double sin(double a) {
  return StrictMath.sin(a); // default impl. delegates to StrictMath
 } 
 public static double cos(double a) {
  return StrictMath.cos(a); // default impl. delegates to StrictMath
 }
 public static double tan(double a) {
  return StrictMath.tan(a); // default impl. delegates to StrictMath
 }
 ......
 public static float scalb(float f, int scaleFactor) {
  return sun.misc.FpUtils.scalb(f, scaleFactor);
 }
}

以上がJavaでのプライベートコンストラクタの使い方を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。