1

Java のエラー処理のハンドルを取得しようとしています。1 つのことを実行し、その操作の結果をメイン スコープに返す小さな try/catch ブロックを作成することは可能ですか?

少し奇妙に思えるのは、すべてが try ブロック内に入る必要があるようです。

次のテストを設定しました。

public class test {
    public static void main(String[] args) {
        System.out.println(0-10);
        int guess;
        try {
            guess = 5;
        }
        catch(Exception ex) {
            System.out.println("bugger");
        }
        System.out.println(guess);
    }
}

念のため、変数を宣言してから、try ブロック内で値を代入しますが、try ブロック内にしか存在しないようです。try の外で印刷しようとすると、エラーになります。試行から情報を渡す方法はありますか?

4

4 に答える 4

2

guessプログラムの最後に出力しようとすると、コンパイラは初期化されているかどうかを判断できないため、エラーが発生します。tryブロック内で例外がスローguessされ、何も割り当てられない場合はどうなりますか? 最初に、最初にデフォルト値に割り当てる必要がありますint guess = 0

于 2012-10-03T01:31:16.800 に答える
2

既存のコードでは、try ブロックの外で変数にアクセスしようとすると、コンパイラは「変数が初期化されていない可能性がありますguess」と言って文句を言います。guess

解決策 : 次のように、try ブロックのすぐ外側に値を割り当てます。

int guess = 5;

しかし、そうするとtry/catchが役に立たなくなると思います。

したがって、サンプルで実際に期待していることに応じて、たとえば、単純に 0 に初期化できます。

public class test {
    public static void main(String[] args) {
        System.out.println(0-10);
        int guess = 0;
        try {
            guess = 5;
        }
        catch(Exception ex) {
            System.out.println("bugger");
        }
        System.out.println(guess);
    }
}
于 2012-10-03T01:33:43.883 に答える
1

定義上、try-catch ブロックは完全に実行されるとは限りません。その結果、コンパイラは、それが確実にguess設定されていることを知りません。したがって、ローカル フィールドは使用する前に初期化する必要があるため、コンパイラは値が確実に割り当てられることを5知りません。guess

これを解決するには、単純guessにデフォルト値を設定して、コンパイラーが初期化されたことを認識できるようにします。

//...
int guess = 0;
try {
    guess = 5;
}
//...
于 2012-10-03T01:36:22.587 に答える
0

概念的には、変数の推測を操作するとエラーのために例外が発生する可能性がある場合、対応する catch ブロックでキャッチされた後に操作を続けることは意味がありません。

推測を操作しても例外が発生しない場合は、try ブロックの外側で処理するだけで問題ありません。

提示されたコードはあいまいです。例外が発生してキャッチされた場合、プログラムは一貫した値を持たないからです。

于 2012-10-03T01:36:23.987 に答える