神奇的finally
直接上菜
1.
int x = 1;
try {
System.out.println("try");
return x;
} finally {
System.out.println("finally");
x++;
}
得到 1 .
先将try的return放进罐子 ,
finally执行完成后x确实变成了2,
但是取的罐子的值所以为1 .
2.
int x = 1;
try {
System.out.println("try");
return x;
} finally {
System.out.println("finally");
return ++x;
}
得到 2 ,
先自增在return
类似: return x++ , 得到1 .
先return再自增
3.
int x = 0;
if (x<1) return 0
try {
System.out.println("try");
return 1;
} finally {
System.out.println("finally");
return 2;
}
得到 0 . 结论: 只有try执行了finally才会执行 (有问题)
4.
int x = 0;
try {
System.out.println("try");
System.exit(0);
return 1;
} finally {
System.out.println("finally");
return 2;
}
没有返回值, 只打印了try .
结论:
这里使用System.exit(0)迫使程序停止了,
再或者断电,其他原因退出都不会执行finally代码块
只有try正常执行完成了finally才会执行