关于 try-catch-finally 的总结
尊重原创,转载请注明出处!
创作不易,如有帮助请点赞支持~
引言
try-catch-finally 在开发中会经常用到,但是具体到一些场景,如果对它的理解不够深,就没法对代码的逻辑执行进行把控。以下的几种场景,你们都能正确地知道它的执行结果吗?
无返回值函数,如果没有 catch 异常,finally 会执行,再抛出异常
测试代码如下:
private static void test1() {
System.out.println("test1 start");
try {
int a = 10;
int b = 0;
System.out.println("" + (a / b));
} finally {
System.out.println("finally");
}
System.out.println("test1 end");
}
执行结果如下,可以看到发生异常后,finally 内的代码执行了,再抛出异常:
无返回值函数,如果 catch 了异常,先执行 catch 中的代码,再执行 finally 中的逻辑
测试代码如下:
private static void test2() {
System.out.println("test2 start");
try {
int a = 10;
int b = 0;
System.out.println("" + (a / b));
} catch(ArithmeticException e) {
System.out.println("catch ArithmeticException: " + e.getMessage());
} finally {
System.out.println("finally");
}
System.out.println("test2 end");
}
执行结果如下,先执行 catch 的逻辑,再执行 finally 的逻辑:
有返回值函数,如果没有 catch 异常,且在 finally 里面有返回值,则正常返回,不抛异常
测试代码如下:
private static int test3() {
System.out.println("test3 start");
try {
int a = 10;
int b = 0;
return (a / b);
} finally {
System.out.println("finally");
return 1000;
}
}
执行结果如下,finally 的逻辑被执行,并正常返回:
有返回值函数,如果 catch 了异常,且 finally 里面有返回值,则 catch 的逻辑会执行,但最终返回的是 finally 中的返回值
测试代码如下:
private static int test4() {
System.out.println("test4 start");
try {
int a = 10;
int b = 0;
return (a / b);
} catch(ArithmeticException e) {
System.out.println("catch ArithmeticException: " + e.getMessage());
return -1;
} finally {
System.out.println("finally");
return 1000;
}
}
执行结果如下,catch 中的逻辑虽然执行了,但是并没有按 catch 中的返回值返回,而是执行 finally 中的逻辑后,按 finally 中的返回值返回:
有返回值函数,如果在 finally 里面无返回值,且没有 catch 异常,则先执行 finally,再抛出异常
测试代码如下:
private static int test5() {
System.out.println("test5 start");
try {
int a = 10;
int b = 0;
return (a / b);
} finally {
System.out.println("finally");
}
}
执行结果如下,finally 的逻辑会执行,但最终还是会抛出异常:
总结
在开发中一定要注意 try-catch-finally 之间的关系,在一些比较重要的逻辑,比如文件操作、数据的操作等,要灵活运用 catch 捕获相应的异常,并且在 finally 中做一些必要的处理,防止内存泄漏、或数据异常等情况发生!