未初始化的局部变量-无错误:Java
下面是两个未初始化的局部变量。但这并没有给出编译时或运行时错误,而是完全执行。这在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'可能未初始化”错误。没有默认值或运行代码的能力。这将是一个编译时错误,您的代码将无法运行。如果变量是类字段,则它们将获得某些类型的默
这个代码没有任何错误。你实际上没有使用这些变量,所以没有问题。如果你真的尝试使用它们,那么这将成为一个问题。比如说,
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您不明白这是怎么回事?我似乎很清楚。未使用的局部变量在运行时不会产生任何影响,显然是被“优化”掉的候选者。