执行顺序:
- 父类的静态代码块 只执行一次 并且在类加载的时候执行
- 子类的静态代码块
- 父类的代码块
- 父类的构造方法
- 子类的代码块
- 子类的构造方法
验证
父类↓
public class Animal {
public String name;
public int legs;
{
System.out.println("父类普通代码块");
}
static{
System.out.println("父类静态代码块");
}
public Animal(String name,int legs) {
System.out.println("父类构造方法");
}
public void enjoy(){
System.out.println("父类普通方法");
}
}
子类↓
public class Dog extends Animal {
// private static Dog d = new Dog("大黄",5);
public String eyescolor;
{
System.out.println("子类普通代码块");
}
static{
System.out.println("子类静态代码块");
}
public Dog(String name,int legs) {
super(name, legs);
System.out.println("子类构造方法");
}
public void eat(){
System.out.println("子类普通方法");
}
}
main↓
public class Test {
public static void main(String[] args) {
Dog d = new Dog("大黄",5);
}
}
运行结果↓
子类添加代码 private static Dog d = new Dog("大黄",5);↓
public class Dog extends Animal {
private static Dog d = new Dog("大黄",5);
public String eyescolor;
{
System.out.println("子类普通代码块");
}
static{
System.out.println("子类静态代码块");
}
public Dog(String name,int legs) {
super(name, legs);
System.out.println("子类构造方法");
}
public void eat(){
System.out.println("子类普通方法");
}
}
运行结果↓
可以得出结论:静态代码块只执行一次;如果类中有静态变量,则先加载静态变量。在进主方法时,一个类中静态的代码会按照代码的顺序来执行。
父类的静态代码块优先于子类的静态代码块执行,子类的静态代码块优先于除父类静态代码块之外的其他父类方法,其余方法都是父类优先于子类执行。