您的位置:首页 > 编程语言 > Java开发

Java中 子、父类加载的顺序问题

2013-10-19 16:21 253 查看
Java中子父类加载的顺序问题

在论坛看到这么个问题,经过一番分析,应该是子父类加载顺序导致的问题:

别人的问题:

class Base
{
public Base()
{
test();
}
public void test()           //①号test方法
{
System.out.println("将被子类重写的方法");
}
}
public class Sub extends Base
{
private String name;
public void test()        //②号test方法
{
System.out.println("子类重写父类的方法,"
+ "其name字符串长度" + name.length());
}
public static void main(String[] args)
{
Sub s = new Sub();
}
}

问结果会是什么?

其结果是:代码中 name.length()的name是null,不能点调用length(),出现空指针异常。

分析:

就是new的时候,往堆里加载子类和父类的顺序先后导致的问题。运行时,先父类往堆里加,这时子类还没进堆,子类的name还没加进堆呢,

只不过父类Test的方法,要加子类的Test(执行时动态绑定,用复写的方法),执行方法时,一看name,堆里根本没得,就是null。加载完父类,而后再加子类进堆,才执行private
String name语句,这个时候才有了name。其实调试下就知道了,先用的Test(),完了后,再到private String name语句。

小结:new子类对象时,先要加载它的父类,即父类先比子类先入堆。所以在使用复写方法时要注意哪些东西存在。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: