使用Java我试图在声明时初始化成员变量,但由于某种原因,变量保持默认值,例如0,null等。
请参阅示例代码片段,演示我正在尝试完成的任务:
public class B extends A {
Map<Integer, Integer> map = new HashMap <Integer, Integer>();
int number = 10;
public B() {
super();
}
public Map getMap() {
return map;
}
public int getNumber() {
return number;
}
}
代码的重要部分是它是一个子类,我试图在声明时初始化两个成员变量。当我进入构造函数时,map和number的值分别为null和0,这是什么原因?
答案 0 :(得分:4)
根据规范,在初始化B类成员之前执行基类的构造函数。
答案 1 :(得分:0)
我的猜测是这里发生的事情:
class A {
protected Map<Integer,Integer> map;
protected int number;
public A() {
map=new Map() {{ //This is just initializing the map
put(1,1);
}}
number=5;
}
}
public class B extends A {
Map<Integer, Integer> map = new HashMap <Integer, Integer>();
int number = 10;
public B() {
super();
}
}
从编译器的角度来看,B
构造函数中发生了什么:
A
。Map
的新map
。int
的新number
。map
值为1。number
初始化为5。B
的构造函数的其余部分。Map
的新map
。这将覆盖map
中构造的名为A
的变量。int
的新number
。这将覆盖number
中构造的名为A
的变量。map
。)number
。)我希望这可以解决问题。如果您不希望这种情况发生,请在自己的构造函数中初始化B
的字段。