1

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

class A2{ }

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

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

}
4

4 回答 4

3

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

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

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

于 2016-02-26T06:09:45.537 回答
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.4.2 局部变量声明的执行 局部变量声明语句是可执行语句。每次执行时,声明符从左到右依次进行处理。如果一个声明器有一个初始化器,初始化器被计算并且它的值被赋值给变量。 如果声明器没有初始值设定项,则每次对变量的引用都必须在执行对变量的赋值之前执行,否则根据第 16 节(定义赋值)的规则会发生编译时错误。 只有在前一个初始化程序的评估正常完成时,才会评估每个初始化程序(第一个除外)。仅当最后一个初始化程序的评估正常完成时,局部变量声明的执行才能正常完成。如果局部变量声明不包含初始化程序,则执行它总是正常完成。

于 2016-02-26T06:46:04.633 回答
0

一旦开始使用未初始化的局部变量,就会出现编译时错误。例如:

案例1:没有错误

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

案例 2:给出错误

 public static void doJob(int[] a){
    
    int temp;
    System.out.println(temp);    
}
于 2020-09-07T15:06:29.560 回答
0

这两个变量都没有在代码中使用。一旦您尝试将其用作 System.out.println("Main" + x); 它会给你编译错误,因为局部变量没有初始化。

于 2016-02-26T06:13:05.317 回答