未初始化的局部变量 - 无错误:Java

时间:2016-02-26 06:04:59

标签: java initialization local-variables main-method

这是两个未初始化的局部变量。这仍然不会给出编译时或运行时错误并完全执行。这是Java和How中允许的事情(欢迎解释)。

class A2{ }

public class A {
public static void main(String[] args) {
    int x;
    A2 a2;

    System.out.println("Main");
}

}

4 个答案:

答案 0 :(得分:0)

该代码没有任何不正确之处。你实际上并没有使用这些变量,所以没有问题。如果你确实试图使用它们,那么它将成为一个问题。例如,

System.out.println(a2);
System.out.println(x);

会带来"变量' x' a2'可能没有被初始化"错误。没有默认值或运行代码的能力。这将是编译时错误,您的代码将无法运行。如果变量是类字段,则它们将获得某些类型的默认值,否则将获得null

答案 1 :(得分:0)

代码中不使用这两个变量。一旦你尝试将它用作System.out.println(" Main" + x);由于未初始化局部变量,它将为您提供编译错误。

答案 2 :(得分:0)

是的,只要您不访问上述代码中的局部变量声明,就允许这样做。如果您碰巧编写了访问这些变量的任何代码,则代码将无法编译。

根据Java语言规范,您不能访问局部变量(您在方法中声明的变量),除非它们在访问之前被初始化。以下是SE 8的Java语言规范。

https://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#jls-14.4.1

第16章 - 明确作业

“对于局部变量的每次访问或空白的最终字段x,x必须是明确的 在访问之前分配,或发生编译时错误。“

第14章

14.4.2执行局部变量声明 局部变量声明语句是可执行语句。每次都是 执行后,声明器按从左到右的顺序处理。如果是声明者 有一个初始化程序,初始化程序被评估,其值被赋给变量。 如果声明者没有初始值设定项,则每次对该变量的引用都必须为 之前执行对变量的赋值,或者发生编译时错误 §16(确定任务)的规则。 每个初始值设定项(第一个除外)仅在评估前面的时间时进行评估 初始化程序正常完成。 只有在评估时,才能正常执行局部变量声明 最后一个初始化程序正常完成。 如果局部变量声明不包含初始值设定项,则始终执行它 正常完成。

答案 3 :(得分:0)

一旦开始使用未初始化的局部变量,您将得到一个编译时错误。例如:

情况1:没有错误

public static void doJob(int[] a){
    
   int temp;   
}

情况2:出现错误

 public static void doJob(int[] a){
    
    int temp;
    System.out.println(temp);    
}