Java不打印默认单位化值
我知道,只声明但未初始化的Java对象默认为Java不打印默认单位化值,java,Java,我知道,只声明但未初始化的Java对象默认为null值,但为什么下面的代码不编译并输出null String a; System.out.println(a); 作为对象引用的实例变量总是初始化为null。但局部变量的情况并非如此 您需要显式初始化局部变量 e、 g 默认情况下初始化类的字段 像 但局部变量必须显式初始化。因此,上面的代码无法工作,因为必须显式初始化a 您可能需要阅读,部分,其中详细解释了此行为。来源: 每个局部变量(§14.4)和每个空白最终字段(§4.12.4,§8.3.1
null
值,但为什么下面的代码不编译并输出null
String a;
System.out.println(a);
作为对象引用的实例变量总是初始化为null。但局部变量的情况并非如此 您需要显式初始化局部变量 e、 g
默认情况下初始化类的字段 像 但局部变量必须显式初始化。因此,上面的代码无法工作,因为必须显式初始化
a
您可能需要阅读,部分,其中详细解释了此行为。来源:
每个局部变量(§14.4)和每个空白最终字段(§4.12.4,§8.3.1.2)在访问其值时必须具有明确的赋值
您的代码将适用于非最终字段(实例或静态变量),因为它们是按照初始化的,但会因此导致局部变量的编译时错误
如果a
是一个基本变量,则情况也是如此。下面是一个简短但完整的程序,展示了所有这些:
class Test {
static int x;
static String y;
public static void main(String[] args) {
System.out.println(x);
System.out.println(y);
int lx;
String ly;
System.out.println(lx); // Compile-time error
System.out.println(ly); // Compile-time error
}
}
删除非编译行后前两行的输出:
0
null
必须先初始化java中的字段,然后才能访问它们。 引用类型(例如)的类属性(字段)不能显式初始化,因为它们保证在对象构造(我指的是构造函数代码执行)之前初始化为null。这可以保证您不会访问未初始化的字段。
本地方法字段没有这种逻辑,因此必须显式执行。doh!我在main函数中完成了这一切。术语说明:你没有声明一个对象,而是声明一个变量。让这两个概念在你的脑海中分开是很重要的。@JonSkeet啊,当然,谢谢你!
class Test {
static int x;
static String y;
public static void main(String[] args) {
System.out.println(x);
System.out.println(y);
int lx;
String ly;
System.out.println(lx); // Compile-time error
System.out.println(ly); // Compile-time error
}
}
0
null