写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分割线----
可以看到由于静态代码无需再次初始化。