public class Person {
public String name;
public int age;
public Person(String name, int age){
this.name = name;
this.age = age;
System.out.println("构造方法执行");
}
{
System.out.println("实例代码块执行");
}
static {
System.out.println("静态代码块执行");
}
}
public class TestDemo{
public static void main(String[] args) {
Person person1 = new Person("A", 10);
System.out.println("---------------");
Person person2 = new Person("B", 20);
}
}
执行结果
静态代码块执行 实例代码块执行 构造方法执行 --------------- 实例代码块执行 构造方法执行
结论
- 静态代码块只执行一次;静态代码块先执行,实例代码块紧接着执行,最后构造方法执行。
public class Person {
public String name;
public int age;
public Person(String name, int age){
this.name = name;
this.age = age;
System.out.println("Person: 构造方法执行");
}
{
System.out.println("Person: 实例代码块执行");
}
static {
System.out.println("Person: 静态代码块执行");
}
}
public class Student extends Person{
public Student(String name, int age) {
super(name, age);
System.out.println("Student: 构造方法执行");
}
{
System.out.println("Student: 实例代码块执行");
}
static {
System.out.println("Student: 静态代码块执行");
}
}
public class TestDemo{
public static void main(String[] args) {
Student student1 = new Student("C", 15);
System.out.println("-------------");
Student student2 = new Student("D", 17);
}
}
执行结果
Person: 静态代码块执行 Student: 静态代码块执行 Person: 实例代码块执行 Person: 构造方法执行 Student: 实例代码块执行 Student: 构造方法执行 ------------- Person: 实例代码块执行 Person: 构造方法执行 Student: 实例代码块执行 Student: 构造方法执行
结论
- 父类静态代码块优先于子类静态代码块执行;父类的实例代码块和父类构造方法执行;子类的实例代码块和子类构造方法执行;第二次实例化子类对象时,父类和子类的静态代码块都不会执行。



