父类
public class Animal {
public String name;
public int leg;
static {
System.out.println("这是父类的static代码块");
}
{
System.out.println("这是父类的代码块");
}
public Animal() {
System.out.println("这是父类的构造方法");
}
public void enjoy() {
System.out.println("叫");
}
}
子类
public class Dog extends Animal {
public String eyecolor;
public void enjoy() {//方法重写
System.out.println("汪汪汪!");
}
{
System.out.println("这是子类的代码块");
}
static {
System.out.println("这是子类的static代码块");
}
public Dog() {
System.out.println("这是子类的构造方法");
}
}
在test类中创建子类的对象,输出结果如下
public class Test {
public static void main(String[] args) {
Dog d = new Dog();
// Animal a = new Dog();
}
}
当我们在test类中同时创建子类和父类引用指向子类对象时,输出结果如下
由此我们可以得出结论:
java加载类的顺序为:父类的static代码块-------> 子类的static代码块 ------> 父类的代码块 ------> 父类的构造方法 ------> 子类的代码块 ------> 子类的构造方法
其中,static代码块在类中只加载一次,如果再次需要加载带有static代码块的类时,第二次不加载,且如果有多个static代码块,按照它们在类中所写的顺序来加载。



