2014-01-06 58 views
2

嗨,我有以下代码。当我使用实例变量,我得到如下输出(默认值)java中的默认值

int value: 0 
float value: 0.0 
String value: null 
Static int value: 0 

但如果我尝试声明局部变量,并打印它给一个错误,该变量应该被初始化为默认值。任何人都可以解释我的理由吗?

public class DefaultValues { 
    int a; 
    float b; 
    String c; 
    static int d; 
    public static void main(String[] args) {  
    int e;          // <---- 
    DefaultValues dv = new DefaultValues(); 
    System.out.println("int value: "+dv.a); 
    System.out.println("float value: "+dv.b); 
    System.out.println("String value: "+dv.c); 
    System.out.println("Static int value: "+d); 
    System.out.println("local int value: "+e); // <---- 
    } 
} 
+4

局部变量没有默认值。它们必须在使用前初始化。 –

回答

2

只有实例变量,静态(类)变量和数组组件被初始化为默认值。

局部变量除非被初始化,否则不能使用,因为它们没有被赋予缺省值。

+2

_are arrays_你的意思是说别的吗? –

+0

是**一个数组初始化器创建一个数组并为其所有组件提供初始值**。 –

+0

哦,现在你明白了。谢谢! –

1

Java Language Specification 3.0, 4.12.5变量的初始值:

局部变量(§14.4,§14.14)必须被明确地给出的值 在使用之前,通过任一初始化(§14.4)或分配 (第15.26节),可以通过编译器使用 规则进行明确分配(§16)来验证。

1

我们可能有未初始化的局部变量,但编译器将不允许使用,除非我们明确地初始化它们。这是Java语言规则。见JLS 4.12.5。变量http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html

•本地变量(§14.4,§14.14)的初始值必须被明确地给出的值 在使用之前,通过任一初始化(§14.4)或分配 (§15.26),在一种可以使用明确的 赋值(§16)规则验证的方法。

1

对于类成员(变量)JVM将投入的默认值或默认值,将其初始化为一个局部变量它使分配和访问变量之前的初始值。

从文件:

它并不总是必要的,当某个字段声明分配一个值。 已声明但未初始化的字段将被编译器设置为 合理的默认值。一般来说,根据数据类型的不同,默认的 将为零或为空。然而,依靠这样的 默认值,一般认为编程风格不好 。

有关类成员默认值的更多信息,您可以检查Primitive Data Types中不同数据类型的默认值。