0

我是 Java 的初学者,正在努力理解变量初始化的以下问题,希望得到专家的帮助。

给定考试的代码:

public class SimpleCalc {
    public int value;
    public void calculate() { value += 7; }
}

public class MultiCalc extends SimpleCalc {
    public void calculate() { value -= 3; }
    public void calculate(int multiplier) {
        calculate();
        super.calculate();
        value *= multiplier;
    }
    public static void main (String[] args) {
        MultiCalc calculator = new MultiCalc ();
        calculator.calculate(2);
        System.out.println(calculator.value);
    }
}

我的理解是,这需要引发运行时异常,因为变量“值”永远不会获得分配给它的实际初步值(公共 int 值;)。但是,代码的工作和行为就像变量“value”被分配了 0(与 public int value=0; 相同)。有人可以解释一下为什么会这样吗?非常感谢

4

4 回答 4

8

. 但是,代码的工作和行为就像变量“value”被分配了 0(与 public int value=0; 相同)。

java中的实例变量获取默认值。即,int 获取 0 作为默认值,float 获取 0.0 等等。因此,如果您不初始化,它们将获得默认值。

Data Type   Default Value (for fields)
byte    0
short   0
int 0
long    0L
float   0.0f
double  0.0d
char    '\u0000'
String (or any object)      null
boolean false
于 2013-04-23T08:55:09.707 回答
1

我的理解是,这需要引发运行时异常,因为变量“值”永远不会获得分配给它的实际初步值(公共 int 值;)。

未能初始化必须初始化的变量由编译器检查并且是编译时错误。

运行时错误在运行时引发。即当您运行已成功编译的程序时。未能设置值会导致的唯一运行时错误是 NullPointerException(用于访问空引用),或者如果您除以一个为零的整数,则很少会出现 ArithmeticException。

final必须初始化字段和局部变量,但非最终字段将为其默认值。

于 2013-04-23T09:03:52.457 回答
0

Java 中的原始类型总是被赋予一个默认值。对于 anint这始终为 0。

如果您要使用一个Integer对象(而不是int),如果它没有被初始化,您会看到一个空指针异常被抛出。

于 2013-04-23T08:56:38.153 回答
0

这种初始化发生在java中的实例变量上。变量“值”是一个实例变量,存在于该类的每个对象中。数据类型的实例变量int具有分配给它的默认值 0。不同的数据类型(实例变量)具有不同的默认值。

例子

于 2013-04-23T08:58:01.813 回答