代码块初始化顺序(无继承关系)
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("ww",22);
System.out.println("----------------------------");
Person person2 = new Person("hh",23);
}
}
运行结果:
得出结论:
1.静态代码块先执行,并且只执行一次。
2.当创建对象时,才会执行实例代码块。
3.构造方法最后执行
代码块初始化顺序(继承关系中)
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:这是静态代码块");
}
}
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("s",20);
System.out.println("----------------------------");
Student student2 = new Student("l",20);
}
}
运行结果:
得出结论:
1.静态代码块优先执行,且父类的静态代码块优先于子类的静态代码块。
2.实例代码块和构造方法紧接着执行,且父类先于子类。
3.父类和子类的静态代码块只执行一次。