JVM 类的加载(四)- 父类子类加载关系

子类与父类的在类的启动时,遵循父类先加载,子类后加载的规则,常会用做于坑爹笔试题。下面看代码解释。 有两个类 Parent 和 Child,Child extend Parent。测试

public class Parent
{
	public static int parent;
	static
	{
		System.out.println("This is Parent");
	}
}
public class Child extends Parent
{
	public static int child;
	static
	{
		System.out.println("This is Child");
	}
}

接下来,咱们写一个Test测试类来测试这父子类的加载顺序code

public class Test {
    public static void main(String[] args) {
        System.out.println(Child.child);
    }
}

咱们来输出Child里的child变量,结果为对象

This is Parentclass

This is Child变量

0object

由此可看出,在访问Child里的静态成员变量child的时候,会引发类的加载,同时,子类加载以前,父类会先于子类加载。因此先输出父类结果,其次子类,最后本身的成员变量程序

紧接着,咱们再写一个Test类来访问父类笔试

public class Test {
    public static void main(String[] args) {
        System.out.println(Parent.parent);
    }
}

结果为static

This is Parent笔试题

0

因而可知,在加载父类的时候,子类不会被加载。这个比较容易理解,由于全部的对象的父类都是object,若是你加载object时,子类也加载了,那程序岂不是要崩溃。。。

最后,再用下面的写法再作一个测试,用子类去访问父类的静态成员变量

public class Test {
    public static void main(String[] args) {
        System.out.println(Child.parent);
    }
}

结果为

This is Parent

0

子类仍是没有被调用,这是为何呢,这里须要注意,虽然使用了Child的类,但并无访问Child的静态成员变量,因此不会引发Child类的加载,而父类Parent的静态成员变量被访问了,因此父类会加载。 结果就为上。

相关文章
相关标签/搜索