Java:捕获未初始化的变量

时间:2012-12-04 10:11:26

标签: java exception exception-handling try-catch nameerror

假设我们有一个在某些条件下声明变量的情况:

if (x = 1)
 boolean z = true;

稍后,我们想测试变量z是否存在try-catch。这是可能的吗?如果是的话,我们应该抓住什么例外?

try {
 if (z)
  //do smth
} catch (<exception?> ex) {
 //do smth_else
}

当然可以在之前声明z并在if块中相应地更改它的值,但只是假设,在Java中可能是上述的吗? 例如,Python具有NameError,当未声明访问本地或全局变量时将引发该错误。

谢谢!

HSI。

8 个答案:

答案 0 :(得分:2)

如果你声明你的变量怎么办:

Boolean x = null;

在这种情况下,您可以检查它是否为null

更好的选择是使用枚举来表示未初始化的值:

public enum MyEnum {
    UNINITIALIZED, TRUE, FALSE;
}

因为如果你几个月后试图维护你的代码,那么你(或其他人)可能会对布尔值为空而感到困惑。

答案 1 :(得分:2)

如果我们使用的变量未声明或在当前范围内不可见,我们将收到编译错误。 如果它被声明,我们可以检查NullPointerException,如果它是对象。如果是原始数据类型,我们应该检查默认值。

答案 2 :(得分:1)

  

假设我们有一个在某些条件下声明变量的情况:

很难假设,因为那不会编译:

  • 您应该使用==来测试相等性
  • 除非有块
  • ,否则不能在if语句中声明变量

现在假设您将该声明包含在一个块中,该变量的范围将是该块,并且您将无法在try / catch块中使用它(除非它当然位于if块中,但是我认为这不是你想要的。)

答案 3 :(得分:0)

不,这在Java中是不可能的。您必须先声明变量才能引用它,否则会出现编译错误。

答案 4 :(得分:0)

Boolean z = null;
if (x = 1){
  z = true;
}


if(z == null){
 //not initialized

}else{
  //initialized
}

答案 5 :(得分:0)

1,首先你的java语法错误:它可以跟随

if (x == 1)
  boolean z = true;

2,在Java中你必须在使用之前声明变量。

答案 6 :(得分:0)

这是不可能的,Java是一种强类型编程语言,因为每个变量必须先用数据类型声明才能使用。

int x = 1;
boolean z = null;

if (x == 1)
 z = true;

try {
 if (z)
  //do smth
} catch (NullPointerException npe ) {
 //do smth_else
}

答案 7 :(得分:0)

到目前为止,据我所知,你将无法编译这段代码。我不记得任何异常课程,但我认为即使你是&#34;发明&#34;此类错误的例外情况。它不会编译。因为原始类型的默认值被分配给称为字段的未初始化的类变量,但是对于方法体中使用的变量,它会产生编译时错误