static 执行顺序
在继承中,这些代码执行的顺序又如何呢?我们来看下面这个例子
public class Person {
public String name;
public int age;
public static String from;
public Person() {
System.out.println("父类构造方法执行!");
}
//实例成员变量
{
this.name = "zhangsan";
this.age = 18;
System.out.println("父类实例代码块执行!");
}
//实例代码块
static{
from = "中国";
System.out.println("父类静态代码块执行!");
}
//静态代码块
public static void announce(){
System.out.println("我是中国人!");
}
}
public class Student extends Person{
public Student() {
System.out.println("子类构造方法执行!");
}
{
System.out.println("子类实例代码块执行");
}
static{
System.out.println("子类静态方法执行!");
}
}
public class Main {
public static void main(String[] args) {
Student student = new Student();
}
}
在继承关系中,各种代码的执行顺序为:
- 父类静态代码块执行
- 子类静态方法执行
- 父类实例代码块执行
- 父类构造方法执行
- 子类实例代码块执行
- 子类构造方法执行