Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.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_Arrays_Reference_Null_Default - Fatal编程技术网

如何在java中检查未初始化的数组引用?

如何在java中检查未初始化的数组引用?,java,arrays,reference,null,default,Java,Arrays,Reference,Null,Default,我是一个早期的初学者,我试图弄清楚for-each迭代和java中的引用变量是如何工作的,并为自己编写了一些测试代码 为了使用for-each循环,我首先需要一个数组,所以我创建了一个数组引用,但没有初始化它 但是我的代码不会编译,因为很明显,我编写if语句是为了检查未初始化的数组引用,它使用了一个未初始化的变量 public class ForEach { public static void main (String[] args) { // create arr

我是一个早期的初学者,我试图弄清楚for-each迭代和java中的引用变量是如何工作的,并为自己编写了一些测试代码

为了使用for-each循环,我首先需要一个数组,所以我创建了一个数组引用,但没有初始化它

但是我的代码不会编译,因为很明显,我编写if语句是为了检查未初始化的数组引用,它使用了一个未初始化的变量

public class ForEach {

    public static void main (String[] args) {

        // create array reference
        int[] array;

        //check if array reference has been initialized
        if (array == null) { 
            System.out.println("No array has been found.");
        }
        else {
            for (int i : array) {
                if (array[i] != 0) {
                    System.out.println(array[i]);
                 }
            }

        }

    }
}
我认为未初始化数组引用的默认值应该为null,并且可以在if语句中检查null。 那么,为什么会出现编译错误,告诉我变量“array”可能尚未初始化,否则如何检查空引用

希望有人能帮我。 事先非常感谢


另外,我的每个循环是否有意义不是问题。现在-

null和未初始化之间存在差异

null仍然是有效值。局部变量不需要有任何值,但只要它们没有值,您就无法读取它们。完全唯一合法的做法是赋予它价值

只需替换line int[]数组;int[]数组=null;一切都会好起来。

当你为一个类构造一个对象时,它的属性会用默认值初始化。但方法中定义的局部变量需要初始化

如果移动数组(如下所述),您会注意到错误会消失,因为它现在是一个类属性,并将用null初始化


类上的字段将自动设置为null,因为它们最终可能会被使用,但由于局部变量只能在本地使用,所以在不初始化它们的情况下声明它们可以被安全地认为是错误的

在使用阵列之前,需要对其进行初始化。它可以设置为null或某个值,但您必须对其进行初始化。如果您将数组作为方法参数接收,您的代码将运行良好。谢谢,但我认为编译器会自动将每个未初始化的引用变量设置为null。那么我什么时候可以检查null呢?这就是Java编译器的工作原理。您必须按照编译器接受的方式编写程序。无意冒犯,你的问题是:为什么我必须用to来形容英语中的动词。没有确凿的理由支持它。c的行为不同。不过,我确实认为,如果编译器强制执行初始化,这确实是一项功能,因为它可以保护您免受错误的影响-但这是我个人的观点。与字段不同,局部变量不会自动初始化为默认值。除了所有其他注释之外。这让我明白了,谢谢你:-
public class ForEach {
// create array reference
static int[] array; 
public static void main (String[] args) {


    //check if array reference has been initialized
    if (array == null) { 
        System.out.println("No array has been found.");
    }
    else {
        for (int i : array) {
            if (array[i] != 0) {
                System.out.println(array[i]);
             }
        }

    }

}
}