logo

Java 静的コンストラクター

Java では、コンストラクターを abstract、final、static、native、または strictfp にすることはできません。したがって、静電気は発生しません Javaのコンストラクター

静的データの初期化に使用される静的コンストラクターは、指定されたタスクがプログラム全体で 1 回だけ実行されることを意味します。通常、静的コンストラクターは、最初のインスタンスが生成されるとき、または静的メンバーが参照されるときに自動的に呼び出されます。静的コンストラクターは、static キーワードを使用して明示的に宣言されます。ただし、静的コンストラクターは Java では使用できません。

検索アルゴリズム

静的コンストラクターの主な機能のいくつかは次のとおりです。

  • パラメーターやアクセス修飾子は受け取りません。
  • 特定のクラスは静的コンストラクターを 1 つだけ持つことができます。
  • 継承やオーバーロードは許可されません。
  • これは自動的に呼び出され、直接または明示的に呼び出すことはできません。
  • 静的フィールドの値が初期化されていない場合は、デフォルト値に初期化されます。

Java で静的コンストラクターが許可されない理由を理解しましょう。

静的コンストラクターを宣言したらどうなるでしょうか?

静的コンストラクターは使用できません Javaプログラミング 。静的コンストラクターを使用することは違法であり、Java 標準に違反します。そのため、Java プログラムはコンパイルされず、コンパイル時エラーがスローされます。

例を挙げて理解しましょう。以下の例を考えてみましょう。

StaticConstructorDemo.java:

文字列をjsonオブジェクトに変換する
 public class StaticConstructorDemo { //Declaring a static constructor public static StaticConstructorDemo() { System.out.println('Static Constructor of the class'); } public static void main(String args[]) { // Creating a constructor object to invoke it StaticConstructorDemo obj = new StaticConstructorDemo(); } } 

出力:

 Exception in thread 'main' java.lang.Error: Unresolved compilation problem: Illegal modifier for the constructor in type StaticConstructorDemo; only public, protected & private are permitted. at StaticConstructorDemo.(StaticConstructorDemo.java:4) at StaticConstructorDemo.main(StaticConstructorDemo.java:13) 

上記の例から、例外がスローされていることがわかります。 コンストラクター型の修飾子が不正です '。そしてはっきりと書かれているのは、 公共の、保護された 、& プライベート 許可されています。

Java が静的コンストラクターをサポートしないのはなぜですか?

静的メソッド、静的変数など、何かを静的キーワードでマークすると、それはクラスのみに属します。静的メソッドは、宣言されたクラスに属するため、そのサブクラスから継承することはできません。同様に、静的変数をそのサブクラスで使用することはできません。

Javaバイナリツリー

コンストラクターの場合、コンストラクターは再利用可能なコード ブロックです。つまり、オブジェクトの作成中にサブクラスからコンストラクターを呼び出すことができます。ただし、static として宣言すると、宣言したクラス以外のサブクラスでは使用できなくなります。したがって、コンストラクターを静的として宣言することは違法です。したがって、それは継承の概念の全体的な動機に違反することになります。

コンストラクターを静的として宣言すると、そのサブクラスからはアクセスできなくなり、クラス レベルのみに属します。プログラムはコンパイルされず、コンパイル時エラーがスローされます。

例を挙げて理解してみましょう。

StaticConstructorExample.java:

Javaの文字から文字列へ
 public class StaticConstructorExample { public StaticConstructorExample() { /*Constructor of this class*/ System.out.println('In StaticConstructorExample Class'); } } 

StaticConstructorChild.java:

 public class StaticConstructorChild extends StaticConstructorExample { public StaticConstructorChild() { System.out.println('In StaticConstructorChild class'); } public void display() { System.out.println('Method of StaticConstructorChild class'); } public static void main(String args[]) { StaticConstructorChild obj = new StaticConstructorChild(); obj.display(); } } 

出力:

 In StaticConstructorExample Class In StaticConstructorChild class Method of StaticConstructorChild class 

上記の例から、子クラス オブジェクトが作成されると、最初に親クラス コンストラクターが呼び出され、次に独自のクラス コンストラクターが呼び出されることがわかります。これは、 new キーワードがオブジェクトを作成してから、値を初期化するためのコンストラクターを呼び出すために発生します。すべての子クラスには、親クラスからプロパティを継承する最初のステートメントとして super() コンストラクターがあります。

これが、Java で静的コンストラクターを作成できない理由です。

結論:

Java のコンストラクターは静的であってはなりません。コンストラクターが静的としてマークされていると、子クラスから呼び出すことができないためです。したがって、子クラスのオブジェクトは作成されません。プログラムはコンパイルされず、コンパイル時エラーがスローされます。