未初始化的局部变量 - 无错误:Java
这里有两个未初始化的局部变量。仍然这不会给编译时或运行时错误并且完全执行。在Java和How(这个解释是值得欢迎的)中这个东西是允许的吗?未初始化的局部变量 - 无错误:Java
class A2{ }
public class A {
public static void main(String[] args) {
int x;
A2 a2;
System.out.println("Main");
}
}
该代码没有任何不正确。你实际上并没有使用这些变量,所以没有问题。如果你确实尝试使用它们,那么它会成为一个问题。例如,
System.out.println(a2);
System.out.println(x);
会带来 “变量 'X'/ 'A2' 可能尚未intitialized” 的错误。将没有默认值或运行代码的能力。这将是编译时错误,您的代码将无法运行。如果变量是类字段,则它们将获得某些类型的默认值,否则将会获得默认值。
如果在这个代码中x得到一个默认值,那么我可以打印这个值吗? – IDontKnow006
在这里他们会得到什么值。我没有使用它们。编写代码时,他们是否将某些东西放在堆栈中? – IDontKnow006
为此编辑。 @ IDontKnow006 – ChiefTwoPencils
这两个变量都没有在代码中使用。一旦你尝试使用它作为System.out.println(“Main”+ x);它会给你编译错误,因为局部变量没有被初始化。
在这他们将获得什么价值。我没有使用它们。编写代码时,他们是否将某些东西放在堆栈中? – IDontKnow006
@ IDontKnow006正如你永远无法观察那个价值,这个问题是毫无意义的。甚至可能完全删除变量。 – EJP
@EJP我没有得到你的声明 - 甚至有可能........完全删除。“ – IDontKnow006
是的,只要你不访问它们,就可以在上面的代码中完成局部变量声明。如果你碰巧写了任何访问这些变量的代码,代码将不会编译。
根据Java语言规范,除非在访问之前初始化,否则不能访问本地变量(在方法内部声明的变量)。下面是Java语言规范的SE 8
https://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#jls-14.4.1
第16章 - 明确赋值
“对于一个局部变量或空白决赛场上的每次访问,则x必须被明确 分配在访问之前或发生编译时错误。“
第14章
14.4.2局部变量声明 局部变量声明语句的执行是一个可执行语句。每次执行 时,声明符按从左到右的顺序处理。如果声明者 具有初始值设定项,则初始值设定项会被评估并将其值分配给该变量。 由§16(明确赋值)的 规则如果声明符不具有初始化,然后到可变每引用必须是 通过赋值给变量,或编译时错误的执行之前进行。 只有在对前面的 初始化程序的评估正常完成时,才会评估每个初始化程序(除第一个之外)。 只有当最后一个初始化程序的评估 正常完成时,才执行本地变量声明。 如果局部变量声明不包含初始值设定项,则始终执行 。
我读过“总是初始化一个局部变量”“一个未初始化的局部变量违反了java规则 – IDontKnow006