java 类初始化顺序

写demo验证一下。
PS: 我是Android 开发工程师,新建android工程验证


public class BaseClass {
    // 静态变量
    public static String staticField = "classTest BaseClass 静态变量";

    // 静态初始化块
    static {
        System.out.println(staticField);
        System.out.println("classTest BaseClass 静态初始化块");
    }

    // 变量
    public String field = "classTest BaseClass 变量";

    // 初始化块
    {
        System.out.println(field);
        System.out.println("classTest BaseClass 初始化块");
    }

    // 构造器
    public  BaseClass() {
        System.out.println("classTest BaseClass 构造器");
    }
}

public class ChildClass extends BaseClass {
    // 静态变量
    public static String staticField = "classTest ChildClass 静态变量";

    // 静态初始化块
    static {
        System.out.println(staticField);
        System.out.println("classTest ChildClass 静态初始化块");
    }

    // 变量
    public String field = "classTest ChildClass 变量";

    // 初始化块
    {
        System.out.println(field);
        System.out.println("classTest ChildClass 初始化块");
    }

    // 构造器
    public ChildClass() {
        System.out.println("classTest ChildClass 构造器");
    }
}

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        testClassInit();
    }


    private void testClassInit() {
        System.out.println("classTest -----我是start分割线----");
        new BaseClass();
        System.out.println("classTest -----我是mid分割线----");
        new ChildClass();
        System.out.println("classTest -----我是end分割线----");
    }
}

result:
首次进入程序:

11-10 17:36:15.070 18368-18368/? I/System.out: classTest -----我是start分割线----
11-10 17:36:15.070 18368-18368/? I/System.out: classTest BaseClass 静态变量
11-10 17:36:15.070 18368-18368/? I/System.out: classTest BaseClass 静态初始化块
11-10 17:36:15.070 18368-18368/? I/System.out: classTest BaseClass 变量
11-10 17:36:15.070 18368-18368/? I/System.out: classTest BaseClass 初始化块
11-10 17:36:15.070 18368-18368/? I/System.out: classTest BaseClass 构造器
11-10 17:36:15.070 18368-18368/? I/System.out: classTest -----我是mid分割线----
11-10 17:36:15.070 18368-18368/? I/System.out: classTest ChildClass 静态变量
11-10 17:36:15.070 18368-18368/? I/System.out: classTest ChildClass 静态初始化块
11-10 17:36:15.070 18368-18368/? I/System.out: classTest BaseClass 变量
11-10 17:36:15.070 18368-18368/? I/System.out: classTest BaseClass 初始化块
11-10 17:36:15.070 18368-18368/? I/System.out: classTest BaseClass 构造器
11-10 17:36:15.070 18368-18368/? I/System.out: classTest ChildClass 变量
11-10 17:36:15.070 18368-18368/? I/System.out: classTest ChildClass 初始化块
11-10 17:36:15.070 18368-18368/? I/System.out: classTest ChildClass 构造器
11-10 17:36:15.070 18368-18368/? I/System.out: classTest -----我是end分割线----

按back键后回到桌面此时程序未被kill,如果按多任务键会看到还在后台,然后再点击icon启动:

11-10 17:40:24.105 18368-18368/com.example.bxh.sayhello I/System.out: classTest -----我是start分割线----
11-10 17:40:24.106 18368-18368/com.example.bxh.sayhello I/System.out: classTest BaseClass 变量
11-10 17:40:24.106 18368-18368/com.example.bxh.sayhello I/System.out: classTest BaseClass 初始化块
11-10 17:40:24.106 18368-18368/com.example.bxh.sayhello I/System.out: classTest BaseClass 构造器
11-10 17:40:24.106 18368-18368/com.example.bxh.sayhello I/System.out: classTest -----我是mid分割线----
11-10 17:40:24.106 18368-18368/com.example.bxh.sayhello I/System.out: classTest BaseClass 变量
11-10 17:40:24.106 18368-18368/com.example.bxh.sayhello I/System.out: classTest BaseClass 初始化块
11-10 17:40:24.106 18368-18368/com.example.bxh.sayhello I/System.out: classTest BaseClass 构造器
11-10 17:40:24.106 18368-18368/com.example.bxh.sayhello I/System.out: classTest ChildClass 变量
11-10 17:40:24.106 18368-18368/com.example.bxh.sayhello I/System.out: classTest ChildClass 初始化块
11-10 17:40:24.106 18368-18368/com.example.bxh.sayhello I/System.out: classTest ChildClass 构造器
11-10 17:40:24.106 18368-18368/com.example.bxh.sayhello I/System.out: classTest -----我是end分割线----

可以看到由于静态代码无需再次初始化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值