概述
这几天做了个项目,发现一个很神奇的问题,
public class B extends A {
public B(){
super();
}
private int mm = 10;
public int b;
public int c[] = new int[1];
@Override
public void setMM() {
b = mm;
c[0] = 2;
}
}
public abstract class A {
public A(){
setMM();
}
public abstract void setMM();
}
这里 setMM()
后,获取b的值为0,c = null 报出空指针异常。
NullPointerException: Attempt to write to null array
左思又想,估计是和 父类有关系,去掉继承A一切都正常了,才发现,原来setMM
是父类的初始化的方法,这时候B对象还没初始化,c为空,b为默认值0。
然后将A类构造函数中的 setMM()
注释掉,B不变:
public abstract class A {
public A(){
// setMM();
}
public abstract void setMM();
}
执行:
B b = new B() ;
b.setMM();
LogUtil.e("b = " + b.b);
LogUtil.e("c[0] = " + b.c[0]);
执行结果:
b = 10
c[0] = 2
这下正常了。
NOTICE: 子类继承父类的方法中,若有子类变量调用,则继承的父类方法一定不要在父类的构造方法中调用,因为此时子类对象未生成,此时的子类对象都是默认值或者为空。
最后
以上就是欣喜机器猫为你收集整理的java 数组或者int变量赋值、初始化失败的全部内容,希望文章能够帮你解决java 数组或者int变量赋值、初始化失败所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复