0

我得到了一个try catch finally 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?我有点困惑,最终代码块不会导致返回的数字增加。请有人能更清楚地说明根本原因是什么。

4

2 回答 2

0

我认为这是因为在块return returnNumber;之前计算。finally那时,returnNumber是 6。然后finally块被执行,并returnNumber递增到 7,但是到那时已经太晚了——testFinally已经决定它会返回 6。

于 2013-10-14T19:18:56.817 回答
0

如果 finally 每次都执行,那为什么 testFinally 是 6?

增量正在发生,但它是在您返回原始值之后发生的。您返回的不是 object

于 2013-10-14T19:19:05.930 回答