这是两个未初始化的局部变量。这仍然不会给出编译时或运行时错误并完全执行。这是Java和How中允许的事情(欢迎解释)。
class A2{ }
public class A {
public static void main(String[] args) {
int x;
A2 a2;
System.out.println("Main");
}
}
答案 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);
}