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