目录
1. 运行以下代码观察结果,总结下代码块和变量的初始化顺序(简答题)
public class ClassInitOrderTest {
public static String staticField = "static field";
static {
System.out.println(staticField);
System.out.println("static block");
}
private String field = "member field";
{
System.out.println(field);
System.out.println("non-static block");
}
public ClassInitOrderTest() {
System.out.println("constructor");
}
public static void main(String[] args) {
new ClassInitOrderTest();
}
}
参考答案:
static field
static block
member field
non-static block
constructor
2. 测试多个子类继承的初始化顺序,要求包含静态变量、静态代码块、非静态代码块、构造方法、成员变量。观察测试结果,总结下初始化顺序。
Demo02.java
package com.ly.demo06;
//测试多个子类继承的初始化顺序,要求包含静态变量、静态代码块、非静态代码块、构造方法、成员变量。
class Father{
//静态变量
public static String staticid="Father的staticid 静态变量";
//成员变量
public String nostaticid="Father的nostaticid 非静态变量";
// 静态代码块
static{
System.out.println(staticid);
System.out.println("Father的静态代码块");
}
// 非静态代码块
{
System.out.println(nostaticid);
System.out.println("Father的非静态代码块");
}
// 构造方法
public Father(){
System.out.println("Father的构造方法");
}
}
class Son1 extends Father{
//静态变量
public static String staticIdSon1="Son1的staticid 静态变量";
//成员变量
public String nostaticIdSon1="Son1的nostaticid 非静态变量";
static{
System.out.println(staticIdSon1);
System.out.println("Son1的静态代码块");
}
// 非静态代码块
{
System.out.println(nostaticIdSon1);
System.out.println("Son1的非静态代码块");
}
// 构造方法
public Son1(){
System.out.println("Son1的构造方法");
}
}
class Son2 extends Father{
//静态变量
public static String staticIdSon2="Son2的staticid 静态变量";
//成员变量
public String nostaticIdSon2="Son2的nostaticid 非静态变量";
static{
System.out.println(staticIdSon2);
System.out.println("Son2的静态代码块");
}
// 非静态代码块
{
System.out.println(nostaticIdSon2);
System.out.println("Son2的非静态代码块");
}
// 构造方法
public Son2(){
System.out.println("Son2的构造方法");
}
}
public class Demo02 {
public static void main(String[] args) {
// new Father();
new Son1();
System.out.println();
new Son2();
}
}
输出:
参考答案:
执行顺序:
1、类内容(静态变量、静态初始化块) => 实例内容(变量、初始化块、构造器)
2、父类的(静态变量、静态初始化块)=>子类的(静态变量、静态初始化块)=> 父类的(变量、初始化块、构造器)=> 子类的(变量、初始化块、构造器) (初始化块 => 构造器)