finally语句块一定执行吗?
答案是不一定。
直接返回未执行到finally语句块
抛出异常未执行到finally语句块
系统退出未执行到finally语句块
...
存在很多特殊情况导致finally语句块不执行。
代码如下
public static String test() {
String str = null;
int i = 0;
if (i == 0) {
return str;//直接返回未执行到finally语句块
}
try {
System.out.println("try...");
return str;
} finally {
System.out.println("finally...");
}
}
public static String test2() {
String str = null;
int i = 0;
i = i / 0;//抛出异常未执行到finally语句块
try {
System.out.println("try...");
return str;
} finally {
System.out.println("finally...");
}
}
public static String test3() {
String str = null;
try {
System.out.println("try...");
System.exit(0);//系统退出未执行到finally语句块
return str;
} finally {
System.out.println("finally...");
}
}
————————————————
版权声明:本文为优快云博主「ConstXiong」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/meism5/article/details/89177179
本文探讨了在Java中finally语句块并非总是执行的情况,包括直接返回、抛出异常和系统退出等特殊情况。通过具体代码示例,深入解析了finally语句块的执行逻辑。
139

被折叠的 条评论
为什么被折叠?



