在Java中的条件块中初始化局部变量
Java包含 5 个条件块,即 if、switch、while、for 和 try。
在所有这些块中,如果指定条件为真,则执行块内的代码,反之亦然。此外, Java编译器不允许您未初始化局部变量。
在条件块中初始化局部变量时,必须牢记以下 3 个细节:
1. 如果指定的条件为真,并且条件中提供了“值”,则程序编译正常。
2. 如果指定条件为真,但条件中提供了“变量”,则会出现编译错误。
3. 如果指定条件为假,我们会得到一个编译错误。
上述几点对于原始类型和引用类型的局部变量都是正确的。
例子:
下面的代码将给出编译错误。
// Java program to demonstrate error if we
// assign value to an uninitialized variable
// only in if block.
public class InitTesting {
public static void main(String args[])
{
int i = 100;
int j;
// Note that the condition is false
if (i > 500)
j = i + 5;
System.out.println("j :" + j);
}
}
Output:
prog.java:8: error: variable j might not have been initialized
System.out.println("j :" + j);
^
1 error
if 语句中的条件为假。因此,局部变量“j”永远不会被初始化。因此,尝试在 line8 中引用未初始化的变量 'j' 会产生编译错误。
为避免这种情况,请将您的局部变量初始化为条件块之外的默认值。
下面的代码工作正常 -
// Java program to demonstrate that the above
// error is gone if we initialize the variable.
public class InitTesting {
public static void main(String args[])
{
int i = 100;
int j = 0;
// Note that the condition is false
if (i > 500) {
j = i + 5;
}
System.out.println("j :" + j);
}
}
Output:
j :0
此外,在Java中,“值”是在编译时读取的。但是,“变量”是在运行时读取的。因此,当变量是条件的一部分,而另一个变量在条件块内被初始化时,它会给出一个意外的编译时错误。
示例:看看下面的代码:
// Java program to demonstrate error even if
// condition is true.
class Test {
public static void main(String args[])
{
int a = 90;
int b = 80;
int i;
// The condition is true
if (a > b) {
i = a + 5;
}
System.out.println("i :" + i);
}
}
Output:
prog.java:9: error: variable i might not have been initialized
System.out.println("i :" + i);
^
1 error
无论条件是真还是假,它都会产生编译错误,因为Java在编译时没有读取变量,因此“i”没有被初始化。
另一方面,如果指定值而不是变量,则不会发生这种情况。
// Java program to demonstrate that there is
// no error if we constants in if condition.
class Test {
public static void main(String args[])
{
int i;
if (90 > 80) {
i = a + 5;
}
System.out.println("i :" + i);
}
}
Output:
i :95