0

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

if (x = 1)
 boolean z = true;

稍后,我们想用 try-catch 测试变量 z 是否存在。这可能吗?如果可以,我们应该捕获什么异常?

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

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

谢谢!

恒指。

4

8 回答 8

2

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

Boolean x = null;

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

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

public enum MyEnum {
    UNINITIALIZED, TRUE, FALSE;
}

因为如果您在几个月后尝试维护您的代码,您(或其他人)可能会对 Boolean 为空感到困惑。

于 2012-12-04T10:13:51.713 回答
2

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

于 2012-12-04T10:17:47.747 回答
1

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

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

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

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

于 2012-12-04T10:13:38.073 回答
0

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

int x = 1;
boolean z = null;

if (x == 1)
 z = true;

try {
 if (z)
  //do smth
} catch (NullPointerException npe ) {
 //do smth_else
}
于 2012-12-04T17:11:34.890 回答
0

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

于 2012-12-04T10:13:35.173 回答
0
Boolean z = null;
if (x = 1){
  z = true;
}


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

}else{
  //initialized
}
于 2012-12-04T10:14:06.783 回答
0

1,首先你的java语法是错误的:它可以如下

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

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

于 2012-12-04T10:17:57.680 回答
0

到目前为止,我了解,您将无法编译这段代码。我不记得任何异常类,但我认为即使您为此类错误“发明”异常。它不会编译。因为原始类型的默认值被分配给称为字段的未初始化类变量,但对于方法体中使用的变量,它会产生编译时错误

于 2015-08-13T12:19:50.500 回答