多くの初心者は静的メソッドの使い方を理解できないかもしれません。ここで私の理解を説明します:
静的メソッドの呼び出しにはクラスオブジェクトの作成は必要ありません
オブジェクトを作成する必要がないため、静的メソッドでは this キーワードを使用しないでください
静的メソッドでは、静的メンバー変数と静的メソッドのみを呼び出すことができます。通常のメソッドはオブジェクトを作成して呼び出す必要があり、静的メソッドと競合するためです。メソッド
静的メンバー変数は、通常のメソッドと、クラス名.静的メソッドの形式で直接呼び出すことができる静的メソッドで呼び出すことができます
静的コードブロックは、クラスがロードされるときに実行され、一度だけ実行されます
理論は終わったので、実際の例を見てみましょう:
class Person{ static{ System.out.println("person static"); } public Person(String str) { System.out.println("person "+str); } } public class Test { Person person = new Person("Test"); public Test() { System.out.println("test constructor"); } static{ System.out.println("test static 1"); } public static void main(String[] args) { new MyClass(); } static{ System.out.println("test static 2"); } } class MyClass extends Test { Person person = new Person("MyClass"); static{ System.out.println("myclass static"); } public MyClass() { System.out.println("myclass constructor"); } }
まず出力を推測し、次にそれを比較して何が間違っているかを確認し、理解を深めます
test static 1 test static 2 myclass static person static person Test test constructor person MyClass myclass constructor
まず Test クラスをロードします。 test static 1、test static 2
mainメソッドには、新しいMyClassが追加されます。このとき、MyClassクラスがロードされます。 MyClass クラスにも静的コード ブロックがあり、出力は myclass static
です。MyClass クラスは Test クラスを継承し、Test クラスがロードされている場合、静的コード ブロック内のコンテンツはロードが完了すると、Test クラスの実行が開始されます。このとき、Person クラスはまだロードされていません。静的なコード ブロックがある場合、
person staticを出力して Person のコンストラクターを実行し、
person Testを出力して Test の実行を続行し、メイン メソッド new MyClass() に入ります。ただし、MyClass は Test から継承します。クラスの場合、最初に Test クラス コンストラクターを実行し、
test コンストラクターを出力し、引き続き MyClass、Person person = new Person("MyClass") を実行し、Person クラス コンストラクターを実行し、
person MyClassを出力します。 MyClassのコンストラクタメソッド、出力
実行完了
Javaの親クラスとサブクラスのロード順序を簡単に解説
Javaの継承、サブクラスが継承するかどうか親クラスのコンストラクター
以上がJavaでの静的キーワード、親クラスとサブクラスのロードと実行順序の分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。