2013-04-23 138 views
0

我是一名Java初学者,努力了解以下变量初始化问题,希望能得到专家的帮助。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); 
    } 
} 

我的理解是,这需要抛出一个运行时异常,因为变量“值”永远不会分配给实际的初始值它(public int value;)。但是,代码的工作方式和行为就好像变量“值”被赋值为0(与public int value = 0;相同)。有人可以解释为什么会发生这种情况?非常感谢

回答

8

。但是,代码的工作原理和行为就像变量“值”为 分配0(与public int值= 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 
+0

非常感谢您的解释,非常感谢。 – 2013-04-23 08:58:34

+1

因为你有其他常量键入我会写'(字节)0'和'(短)0'顺便说一句,彼尔姆将在Java 8中离开;;) – 2013-04-23 09:04:47

+1

@PeterLawrey基本上我从Oracle java轨迹复制表。 :) – PermGenError 2013-04-23 09:05:51

0

基本类型在Java中总是会被分配一个默认值。对于int这始终为0

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

0

这种初始化发生在java中的实例变量。变量'value'是存在于该类的每个对象中的实例变量。数据类型为int的实例变量的默认值为0。不同的数据类型(实例变量)具有不同的默认值。

Example

1

我的理解是,这需要抛出一个运行时异常,因为变量“值”从来没有得到分配给它的实际初始值(公共int值)。

未能初始化必须被初始化是由编译器检查和是一个编译时错误的变量。

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

final字段和局部变量必须被初始化,但非最终字段将赋值它们的默认值。