3

以下のコードがあります。

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        try{
            System.out.println("Hardik::"+testFinnalyBlock());  
        }catch(Exception e){
            System.out.println("hhh");
        }
    }


    public static int testFinnalyBlock() throws Exception{
        int a=5,b=10;
        int sum=0;
        try{
            sum = a+b;
            System.out.println("sum==="+sum);
            return sum;
        }catch(Exception e){
            System.out.println("In Catch");
        }finally{
            sum = a+30;
            System.out.println("sum==="+sum);
//          return 1;
        }
        return 1;
    }

上記のコードの出力は Hardik::15 ですが、Hardik::35 である必要があると思います。

誰でもそれがどのように機能するか教えてもらえますか. ありがとう。

4

5 に答える 5

7

finally出力に基づいて、ブロックが実行されています...

sum===15
sum===35
Hardik::15

問題は、セクション のreturnステートメントです。その値はすでにメモリの別の部分に配置されているため、呼び出し元に返された開始値を更新しません...try-catchfinally

アップデート

私はかなり古い学校なので、すべてのメソッドの入口と出口は 1 つであると信じています...

次のようなものは、取得しようとしている結果を生成します...

public static int testFinnalyBlock() throws Exception {
    int a = 5, b = 10;
    int sum = 0;
    try {
        sum = a + b;
        System.out.println("sum===" + sum);
    } catch (Exception e) {
        System.out.println("In Catch");
    } finally {
        sum = a + 30;
        System.out.println("sum===" + sum);
    }
    return sum;
}

エラーのために別の値を返す必要がある場合sumcatchtry-catch

于 2013-08-28T05:52:11.467 に答える
2

returnフォーム try ブロックを削除し、メソッドの最後に追加します。このコードを試してください

   public static int testFinnalyBlock() throws Exception{
    int a=5,b=10;
    int sum=0;
    try{
        sum = a+b;
        System.out.println("sum==="+sum);

    }catch(Exception e){
        System.out.println("In Catch");
    }finally{
        sum = a+30;
        System.out.println("sum==="+sum);
    //          return 1;
    }
    return sum;
}

ロジックではなく、クリーンアップ アクティビティに finally ブロックを使用します。これは適切な方法ではありません。

于 2013-08-28T05:51:48.253 に答える
0

try ブロックから削除return sumすると、目的の出力が得られます。お気に入り..

try{
   sum = a+b;
   System.out.println("sum==="+sum);
}
catch(Exception e){
   System.out.println("In Catch");
}
finally{
   sum = a+30;
   System.out.println("sum==="+sum);
}
return sum;
于 2013-08-28T05:51:01.010 に答える