以下の手順に従って分析
親クラスの定義
package sas.LearnJava;
public class ExcuteOrderTest {
{
System.out.println("我是在父类开始的普通代码块!");
}
public ExcuteOrderTest() {
System.out.println("我是父类的无参构造函数!");
}
public void showSomething() {
System.out.println("我是父类中定义的方法!");
}
static {
System.out.println("我是在父类中静态的代码块!");
}
}
サブクラスを定義します
package sas.LearnJava;
public class SubExcuteOrderTest extends ExcuteOrderTest {
static {
System.out.println("我是在子类中的静态代码块!");
}
public SubExcuteOrderTest() {
System.out.println("我是子类的无参构造函数!");
}
@Override
public void showSomething() {
System.out.println("我是子类中定义的方法!");
}
public static void test() {
System.out.println("子类中的静态测试方法");
}
{
System.out.println("我是在子类结束的普通代码块!");
}
}
デモを使用して、書き込みのサブクラス
package sas.LearnJava;
public class ExcuteOrderDemo {
public static void main(String[] args) {
System.out.println("创建第一个对象");
SubExcuteOrderTest subExcuteOrderTest1 = new SubExcuteOrderTest();
System.out.println("创建第二个对象");
SubExcuteOrderTest subExcuteOrderTest2 = new SubExcuteOrderTest();
}
}
创建第一个对象
我是在父类中静态的代码块!
我是在子类中的静态代码块!
我是在父类开始的普通代码块!
我是父类的无参构造函数!
我是在子类结束的普通代码块!
我是子类的无参构造函数!
创建第二个对象
我是在父类开始的普通代码块!
我是父类的无参构造函数!
我是在子类结束的普通代码块!
我是子类的无参构造函数!
結果から、いくつかを実行することができます:
- あなたがオブジェクトを作成すると、クラスは親クラスのコードブロックと引数なしのデフォルトコンストラクタで実行した後、コードブロックとそのコンストラクタを実行しています
- 実行静的コードブロックは、プログラム内の位置に関わらず、コードブロック、及び非静的コンストラクタの順序を決定し、そして
- コードのサブクラスの静的ブロックは、コード実行の親の静的ブロックの後に実行されます
- 静的コード・ブロック1回だけ実行され、コードの通常のブロックは再初期化とオブジェクトを作成します
package sas.LearnJava;
public class ExcuteOrderDemo {
public static void main(String[] args) {
SubExcuteOrderTest.test();
}
}
我是在父类中静态的代码块!
我是在子类中的静态代码块!
子类中的静态测试方法
オブジェクトを作成しない場合、直接クラスの静的メソッドを呼び出し、静的コードブロックは、親クラスとサブクラスを実行します