0

try catch 最終的に Java の質問を受けました。コードは次のようになります。

package com.test;

public class TestExamples {

public int testFinally(int inputNum) {
    int returnNumber = inputNum;
    try {
        returnNumber++;
        return returnNumber;

    } finally {
        returnNumber++;

    }
}

public StringBuilder testFinallyString() {
    StringBuilder builder = new StringBuilder();
    try {
        builder.append("cool");
        return builder.append("try");

    } finally {
        builder.append("finally");
    }
}


public static void main(String[] args) {
    TestExamples testExamples = new TestExamples();
    System.out.println("The result of testFinally is " + testExamples.testFinally(5));
    System.out.println("The test of testFinallyString is " + testExamples.testFinallyString());

}

    }

結果:

testFinally の結果は 6 testFinallyString
のテストは cooltryfinally です

finally が毎回実行される場合、なぜ testFinally は 6 なのですか? 最終的にコードブロックが返された数値をインクリメントしないことに少し戸惑っています。Pls は、誰かが根本的な理由である可能性があるものにもっと光を当てることができます.

4

2 に答える 2

0

ブロックreturn returnNumber;の前に計算されるためだと思います。finallyその時点で、returnNumberは 6 です。その後、finallyブロックが実行され、returnNumber7 にインクリメントされますが、その時点では手遅れですtestFinally。すでに 6 を返すことを決定しています。

于 2013-10-14T19:18:56.817 に答える
0

finally が毎回実行される場合、なぜ testFinally は 6 なのですか?

インクリメントは発生していますが、プリミティブ値を返した後に発生しています。あなたが返したものはオブジェクトではありません

于 2013-10-14T19:19:05.930 に答える