关于异常处理语句catch和finally的执行先后顺序
来源:互联网 发布:人工智能 电影在线 编辑:程序博客网 时间:2024/05/16 08:40
刚刚看到try catch finally语句,多思考了一下,发现他们的执行顺序心里还有点模糊,
所以特地测试了一下,以下是测试结果总结:
1. 当catch中没有return返回语句是,try catch finally是按从上到下的顺序依次执行!
代码:
public static void main(String[] args) {
int[] arr = { 1, 2, 3 };
System.out.println(arr[2]);
try {
System.out.println(2 / 0);
} catch (ArithmeticException ae) {
System.out.println("系统正在维护,请与管理员联系!");
} finally {
System.out.println("catch成功!");
}
}
执行结果---->:
3
系统正在维护,请与管理员联系!
catch成功!
2. 当catch中有return语句时,执行结果是先执行catch中的内容,当执行到return的时候,先去执行finally中的内容,最后执行return语句。
代码:
public static void main(String[] args) {
System.out.println(Test.test());
}
public static String test() {
int[] arr = { 1, 2, 3 };
System.out.println(arr[2]);
try {
System.out.println(2 / 0);
} catch (ArithmeticException ae) {
System.out.println("系统正在维护,请与管理员联系!");
return "myTest";
} finally {
System.out.println("catch成功!");
}
return null;
}
执行结果---->:
3
系统正在维护,请与管理员联系!
catch成功!
myTest
3. 当catch和finally中都有return字句时,finally中的return字句会覆盖catch中的return返回值.
代码:
public static void main(String[] args) {
System.out.println(Test.test());
}
public static String test() {
int[] arr = { 1, 2, 3 };
System.out.println(arr[2]);
try {
System.out.println(2 / 0);
} catch (ArithmeticException ae) {
System.out.println("系统正在维护,请与管理员联系!");
return "myTest";
} finally {
System.out.println("catch成功!");
return "myfinally";
}
}
执行结果---->:
3
系统正在维护,请与管理员联系!
catch成功!
myfinally
4. 当catch中有return字句,而finally中没有return字句,不过finally中有改变catch中return的返回值时(注意:当返回值类型为基本类型,Date类型时,在finally中修改返回值的值时,不影响catch中return的返回值结果):
代码:
public static void main(String[] args) {
System.out.println(Test.test());
}
public static String test() {
int[] arr = { 1, 2, 3 };
String a = "2";
System.out.println(arr[2]);
try {
System.out.println(2 / 0);
} catch (ArithmeticException ae) {
System.out.println("系统正在维护,请与管理员联系!");
return a;
} finally {
System.out.println("catch成功!");
a = "ccccc";
}
return "";
}
执行结果---->:
3
系统正在维护,请与管理员联系!
catch成功!
2
5. 即上面第4点的特殊点:
当catch中有return字句,而finally中没有return字句,不过finally中有改变catch中return的返回值时(注意:当返回值类型为list,map,数组时,在finally中修改返回值的值时,会影响catch中return的返回值结果):
代码:
public static void main(String[] args) {
int[] arr = { 1, 2, 3 };
System.out.println(Test.test(arr)[2]);
}
public static int[] test(int[] arr) {
System.out.println(arr[2]);
try {
System.out.println(2 / 0);
} catch (ArithmeticException ae) {
System.out.println("系统正在维护,请与管理员联系!");
return arr;
} finally {
System.out.println("catch成功!");
arr[2] = 5;
}
return null;
}
执行结果---->:
3
系统正在维护,请与管理员联系!
catch成功!
5
其中list,map我在这里就没贴代码了,已经通过了测试,各位有兴趣可以自己动手试试!
以上,仅供参考!!
- 关于异常处理语句catch和finally的执行先后顺序
- java异常语句中catch,finally的执行顺序
- 异常处理及try/catch/finally/return 的执行顺序:
- 关于try-catch-finally-return语句的执行顺序
- 捕捉异常中try、catch和finally的执行顺序
- 异常处理的try-catch-finally语句
- java中异常处理finally和return语句的执行顺序
- java中异常处理finally和return语句的执行顺序
- java中异常处理finally和return语句的执行顺序
- try,catch和finally的执行顺序
- 含有return语句的try-catch-finally语句执行顺序
- Java异常处理---finally和return的执行顺序
- try...catch...finally中的执行顺序和return语句 总结
- try-catch语句中return和finally执行顺序详解
- 关于try-catch、throw、finally在异常时的执行顺序
- 关于try-catch、throw、finally在异常时的执行顺序
- 描述异常处理语句try、catch、finally执行时的相互关系
- c#描述异常处理语句try、catch、finally执行时的相互关系
- UINavigationControllr 【导航控制器】自己的见解
- VR和AR将如何发展下去?哪个更有前景?
- Android的五大存储方式:SharedPreferences、内部存储、外部存储、SQLite和网络存储
- 二律背反里的纠结
- Nav Mesh Agent 参数说明
- 关于异常处理语句catch和finally的执行先后顺序
- linux 开放全部端口
- OC和swift 中 CocoaPods 的 安装和使用方法(Mac)
- 结构体对齐问题
- MATLAB中的mean函数
- mif文件生成方法
- MySQL中显示乱码的问题
- IOS开发指南学习——数据持久化(属性列表、对象归档、SQLite)
- [LinkerScript.13] SECTION命令