Java中静态代码块、非静态代码块、构造方法、普通方法的调用顺序总结
话不多说,直接上代码:
父类:
package com.oxygen;
public class BaseClass {
public BaseClass(){
System.out.println("父类构造方法");
}
static {
System.out.println("父类静态代码块");
}
{
System.out.println("父类非静态代码块");
}
}
子类:
package com.oxygen;
public class Person extends BaseClass {
String name;
int age;
{
System.out.println("子类非静态代码块1");
}
{
say();
System.out.println("子类非静态代码块2");
}
public Person(){
System.out.println("子类构造方法");
}
public Person(String name, int age){
this();
this.name = name;
}
void say(){
System.out.println("子类普通方法");
}
{
System.out.println("子类非静态代码块3");
}
static {
System.out.println("子类静态代码块");
}
public static void main(String[] args) {
Person p = new Person();
p.say();
}
}
运行结果:
"D:\IntelliJ IDEA 2019.3.1\jbr\bin\java.exe"
父类静态代码块
子类静态代码块
父类非静态代码块
父类构造方法
子类非静态代码块1
子类普通方法
子类非静态代码块2
子类非静态代码块3
子类构造方法
子类普通方法
Process finished with exit code 0
总结
由结果可以看出:
1、静态代码块最优先执行,先执行父类方法的静态代码块,再执行子类方法的静态代码块;
2、非静态代码块其次执行,执行顺序由上至下,先父后子;
3、再者才是构造方法;
4、最后为普通方法。
如果有什么错误或者不严谨的地方,欢迎大家批评指正。
(如果对您有帮助,可以鼓励鼓励博主,一毛也是爱)