一个类会有如下几个内容,类在初始化时他们是有顺序的
- 静态属性:static 开头定义的属性
- 静态方法块: static {} 圈起来的方法块
- 静态方法:static 修饰的方法(被调用才生效)
- 普通属性: 未带static定义的属性
- 普通方法块: {} 圈起来的方法块
- 普通方法: 普通方法(被调用才生效)
- 构造方法: 类名相同的方法
1.普通类
public class LifeCycle {
// 静态属性
private static String staticField = getStaticField();
// 静态方法块
static {
System.out.println(staticField);
System.out.println("静态方法块");
}
// 静态方法
public static String getStaticField() {
System.out.println("静态方法");
return "静态属性";
}
// 普通属性
private String field = getField();
// 普通方法块
{
System.out.println(field);
System.out.println("普通方法块");
}
// 普通方法
public static String getField() {
System.out.println("普通方法");
return "普通属性";
}
// 构造方法
public LifeCycle() {
System.out.println("构造方法");
}
// 主函数
public static void main(String[] argc) {
new LifeCycle();
}
}
初始化顺序如下
- 静态属性
- 静态方法块
- 普通属性
- 普通方法块
- 构造方法
2.继承
public class LifeCycleFather {
// 静态属性
private static String staticField = getStaticField();
// 静态方法块
static {
System.out.println(staticField);
System.out.println("父类静态方法块");
}
// 静态方法
public static String getStaticField() {
System.out.println("父类静态方法");
return "父类静态属性";
}
// 普通属性
private String field = getField();
// 普通方法块
{
System.out.println(field);
System.out.println("父类普通方法块");
}
// 普通方法
public static String getField() {
System.out.println("父类普通方法");
return "父类普通属性";
}
// 构造方法
public LifeCycleFather() {
System.out.println("父类构造方法");
}
}
public class LifeCycle extends LifeCycleFather{
// 静态属性
private static String staticField = getStaticField();
// 静态方法块
static {
System.out.println(staticField);
System.out.println("静态方法块");
}
// 静态方法
public static String getStaticField() {
System.out.println("静态方法");
return "静态属性";
}
// 普通属性
private String field = getField();
// 普通方法块
{
System.out.println(field);
System.out.println("普通方法块");
}
// 普通方法
public static String getField() {
System.out.println("普通方法");
return "普通属性";
}
// 构造方法
public LifeCycle() {
System.out.println("构造方法");
}
// 主函数
public static void main(String[] argc) {
new LifeCycle();
}
}
初始化顺序
- 父类静态属性
- 父类静态代码块
- 子类静态属性
- 子类静态代码块
- 父类普通属性
- 父类普通代码块
- 父类构造方法
- 子类普通属性
- 子类普通代码块
- 子类构造方法
来源:https://blog.csdn.net/u010286027/article/details/102777370