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

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

未初始化的局部变量-无错误:Java,java,initialization,local-variables,main-method,Java,Initialization,Local Variables,Main Method,下面是两个未初始化的局部变量。但这并没有给出编译时或运行时错误,而是完全执行。这在Java中是允许的吗?如何允许(欢迎解释) 这个代码没有任何错误。你实际上没有使用这些变量,所以没有问题。如果你真的尝试使用它们,那么这将成为一个问题。比如说, System.out.println(a2); System.out.println(x); 会导致“变量'x'/'a2'可能未初始化”错误。没有默认值或运行代码的能力。这将是一个编译时错误,您的代码将无法运行。如果变量是类字段,则它们将获得某些类型的默

下面是两个未初始化的局部变量。但这并没有给出编译时或运行时错误,而是完全执行。这在Java中是允许的吗?如何允许(欢迎解释)


这个代码没有任何错误。你实际上没有使用这些变量,所以没有问题。如果你真的尝试使用它们,那么这将成为一个问题。比如说,

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

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

代码中不使用这两个变量。一旦您尝试将其用作System.out.println(“Main”+x);由于局部变量未初始化,这将导致编译错误。

是的,只要您不访问它们,就允许您在上述代码中进行局部变量声明。如果您碰巧编写了任何访问这些变量的代码,那么代码将无法编译

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

第16章-明确分配

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

第14章

14.4.2局部变量声明的执行 局部变量声明语句是可执行语句。每次都是 执行时,按从左到右的顺序处理声明符。如果一个声明器 如果具有初始值设定项,则会计算初始值设定项并将其值指定给变量。 如果声明符没有初始值设定项,则对变量的每个引用都必须 在执行变量赋值之前,或在 第16条(明确分配)的规则。 每个初始值设定项(第一个除外)仅在对前面的 初始化器正常完成。 局部变量声明的执行通常仅在以下情况下完成 最后一个初始值设定项的正常完成。 如果局部变量声明不包含初始值设定项,则始终执行它
正常完成。

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

案例1:无错误

public static void doJob(int[] a){
    
   int temp;   
}
 public static void doJob(int[] a){
    
    int temp;
    System.out.println(temp);    
}
案例2:给出错误

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

如果在这个代码中x得到一个默认值,那么我可以打印这个值吗?在这个代码中他们会得到什么值。我没有使用它们。写这段代码时,它们会在堆栈中保存一些东西吗?我读过“总是初始化一个局部变量”“一个未初始化的局部变量违反了java规则,在这里它们将得到什么值。我没有使用它们。当编写这段代码时,它们会在堆栈中保存一些东西吗?@IDontKnow006因为你永远无法观察到那个值,所以这个问题毫无意义。甚至有可能变量被完全删除。@EJP我没有得到你的那句话-甚至有可能。。。。。。。。已完全删除。“@IDontKnow006您不明白这是怎么回事?我似乎很清楚。未使用的局部变量在运行时不会产生任何影响,显然是被“优化”掉的候选者。