ホームページ >Java >&#&チュートリアル >Javaでの静的キーワード、親クラスとサブクラスのロードと実行順序の分析

Javaでの静的キーワード、親クラスとサブクラスのロードと実行順序の分析

php是最好的语言
php是最好的语言オリジナル
2018-08-06 11:09:382299ブラウズ

多くの初心者は静的メソッドの使い方を理解できないかもしれません。ここで私の理解を説明します:

  • 静的メソッドの呼び出しにはクラスオブジェクトの作成は必要ありません

  • オブジェクトを作成する必要がないため、静的メソッドでは 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
  1. まず Test クラスをロードします。 test static 1test static 2

  2. mainメソッドには、新しいMyClassが追加されます。このとき、MyClassクラスがロードされます。 MyClass クラスにも静的コード ブロックがあり、出力は myclass static

  3. です。MyClass クラスは Test クラスを継承し、Test クラスがロードされている場合、静的コード ブロック内のコンテンツはロードが完了すると、Test クラスの実行が開始されます。このとき、Person クラスはまだロードされていません。静的なコード ブロックがある場合、

    person static
  4. を出力して Person のコンストラクターを実行し、

    person Test
  5. を出力して Test の実行を続行し、メイン メソッド new MyClass() に入ります。ただし、MyClass は Test から継承します。クラスの場合、最初に Test クラス コンストラクターを実行し、

    test コンストラクター
  6. を出力し、引き続き MyClass、Person person = new Person("MyClass") を実行し、Person クラス コンストラクターを実行し、

    person MyClass
  7. を出力します。 MyClassのコンストラクタメソッド、出力

  8. 実行完了

  9. これらを踏まえて、以下の実行シーケンスをまとめました。 > サブクラス構築方法

    コンストラクタと新規オブジェクトが同時に存在する場合、新規オブジェクトのコンストラクタが先に実行されます。 (このとき、ループのネストが発生してメモリオーバーフローを起こさないように注意してください)
関連記事:

Javaの親クラスとサブクラスのロード順序を簡単に解説

Javaの継承、サブクラスが継承するかどうか親クラスのコンストラクター

以上がJavaでの静的キーワード、親クラスとサブクラスのロードと実行順序の分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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