Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java不打印默认单位化值_Java - Fatal编程技术网

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

我知道,只声明但未初始化的Java对象默认为
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