从
try块返回时,返回值存储在该方法的堆栈帧中。之后,将执行finally块。
更改finally块中的值不会更改堆栈中已存在的值。但是,如果您从finally块再次返回,则堆栈上的返回值将被覆盖,并且
x将返回新值。
如果打印
xinfinally块中的值,您将知道它已执行,并且
x将打印出值。
static int test(){ int x = 1; try{ return x; } finally{ x = x + 1; System.out.println(x); // Prints new value of x }}注意: 如果返回参考值,则参考值存储在堆栈中。在这种情况下,您可以使用该引用来更改对象的值。
StringBuilder builder = new StringBuilder("");try { builder.append("Rohit "); return builder;} finally { // Here you are changing the object pointed to by the reference builder.append("Jain"); // Return value will be `Rohit Jain` // However this will not nullify the return value. // The value returned will still be `Rohit Jain` builder = null;}建议阅读:
- JVM规范-框架



