0

変数が特定の条件で宣言されている場合があるとします。

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。

4

8 に答える 8

2

このように変数を宣言した場合はどうなりますか?

Boolean x = null;

その場合、あなたはそれがそうであるnullかどうかをチェックすることができます。

さらに良い代替方法は、列挙型を使用して初期化されていない値を表すことです。

public enum MyEnum {
    UNINITIALIZED, TRUE, FALSE;
}

数か月後にコードを維持しようとすると、ブール値がnullであることに戸惑う可能性があるためです。

于 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では不可能です。参照する前に変数を宣言する必要があります。そうしないと、コンパイルエラーが発生します。

于 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

それは不可能です。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

これまでのところ、このコードをコンパイルすることはできません。例外クラスを思い出せませんが、このタイプのエラーの例外を「発明」したとしても、私はそう思います。コンパイルされません。プリミティブ型のデフォルト値は、フィールドと呼ばれる初期化されていないクラス変数に割り当てられますが、メソッド本体で使用される変数の場合、コンパイル時エラーが発生します。

于 2015-08-13T12:19:50.500 に答える