B类继承A类后,new B()后执行顺序如下:
1、执行A类的静态方法(只执行一次)
2、执行B类的静态方法(只执行一次)
3、执行A类的成员变量的赋值(没有赋值操作则忽略此步)
4、执行A类的构造方法
5、执行B类成员变量赋值(没有赋值操作则忽略此步)
6、执行B类的构造方法
如果此时再次new B() ,步骤1-2静态方法已经执行过,不会再执行,执行步骤3-6
public class Person {
private String name = "person";
static {
System.out.println("Person父类静态代码块");
}
public Person() {
System.out.println("Person父类构造方法");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Student extends Person{
private int age = 18;
static {
//静态代码块
System.out.println("Student子类静态代码块");
}
Student(int age) {
this.age = age;
System.out.println("Student子类构造方法");
}
public static void main(String[] args) {
Student s1 = new Student(20);
System.out.println("name=" + s1.getName());
System.out.println("age=" + s1.getAge());
Student s2= new Student(24);
System.out.println("name=" + s2.getName());
System.out.println("age=" + s2.getAge());
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
运行后代码结果: