在 try catch 块中返回语句

虽然这是不好的做法,但可以在异常处理块中添加多个 return 语句:

 public static int returnTest(int number){
    try{
        if(number%2 == 0) throw new Exception("Exception thrown");
        else return x;
    }
    catch(Exception e){
        return 3;
    }
    finally{
        return 7;
    }
}

此方法将始终返回 7,因为在返回任何内容之前执行与 try / catch 块关联的 finally 块。现在,最终有了 return 7;,这个值取代了 try / catch 返回值。

如果 catch 块返回原始值并且随后在 finally 块中更改了原始值,则将返回 catch 块中返回的值,并且将忽略 finally 块中的更改。

以下示例将打印 0,而不是 1

public class FinallyExample {

    public static void main(String[] args) {
        int n = returnTest(4);
        
        System.out.println(n);
    }

    public static int returnTest(int number) {
        
        int returnNumber = 0; 
        
        try {
            if (number % 2 == 0)
                throw new Exception("Exception thrown");
            else
                return returnNumber;
        } catch (Exception e) {
            return returnNumber;
        } finally {
            returnNumber = 1;
        }
    }
}