繁体   English   中英

Java变量值初始化

[英]Java variable value initialisation

我是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值;)。 但是,代码可以正常工作并表现为好像变量“值”被分配了0(与public int value = 0;相同)。 有人可以解释为什么会这样吗? 非常感谢

但是,代码可以正常工作并表现为好像变量“值”被分配了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

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

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

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

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

Java中的原始类型总是被分配一个默认值。 对于int它始终为0。

如果要使用Integer对象(而不是int ),那么如果未初始化,则会看到抛出空指针异常的情况。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM