当前位置: 首页 > news >正文

try…catch…finally语句里return语句的执行顺序是怎样的?

第一种情况

try语句块里面有return语句,catch语句块和finally语句块里面没有return语句。

代码如下:

public class Main {public static void main(String[] args) {System.out.println(test1());}public static int test1() {int i =10;try {System.out.println("try语句");return --i;}catch (Exception e) {System.out.println("catch语句");}finally {System.out.println("finally语句");}return 0;}
}

运行结果如下:

try语句
finally语句
9

执行顺序:

1.先执行try块中语句,包括return语句中的表达式运算,但不返回。

2.执行finally语句块中的全部代码。

3.最后执行try块中return 返回。

第二种情况

try语句块和finally语句块里面有return语句,catch语句块里面没有return语句。

代码如下:

public class Main {public static void main(String[] args) {System.out.println(test2());}public static int test2() {int i =10;try {System.out.println("try语句");return --i;}catch (Exception e) {System.out.println("catch语句");}finally {System.out.println("finally语句");return --i;}}
}

运行结果如下:

try语句
finally语句
8

执行顺序:

1.先执行try块中语句,包括return语句中的表达式运算,但不返回。

2.执行finally语句块中的全部代码。

3.最后发现finally语句块中有return语句,从这里返回。

第三种情况

try语句块和catch语句块里面有return语句,finally语句块里面没有return语句,存在异常。

代码如下:

public class Main {public static void main(String[] args) {System.out.println(test3());}public static int test3() {int i =10;try {System.out.println("try语句");int j = 10 / 0;return --i;}catch (Exception e) {System.out.println("catch语句");return --i;}finally {System.out.println("finally语句");}}
}

 运行结果如下:

try语句
catch语句
finally语句
9

执行顺序:

1.先执行try块中语句,出现异常,catch捕获到异常。

2.执行catch块中语句,包括return语句中的表达式运算,但不返回。

3.执行finally语句块中的全部代码。

4.最后执行catch块中return 返回。

第四种情况

try语句块、catch语句块和finally语句块里面都有return语句,存在异常。

代码如下:

public class Main {public static void main(String[] args) {System.out.println(test4());}public static int test4() {int i =10;try {System.out.println("try语句");int j = 10 / 0;return --i;}catch (Exception e) {System.out.println("catch语句");return --i;}finally {System.out.println("finally语句");return --i;}}
}

 运行结果如下:

try语句
catch语句
finally语句
8

执行顺序:

1.先执行try块中语句,出现异常,catch捕获到异常。

2.执行catch块中语句,包括return语句中的表达式运算,但不返回。

3.执行finally语句块中的全部代码。

4.最后发现finally语句块中有return语句,从这里返回。


http://www.mrgr.cn/news/64255.html

相关文章:

  • 域名自动重定向8080端口无法访问后端服务问题
  • 江协科技STM32学习- P33 实验-软件I2C读写MPU6050
  • 20241102编译Rockchip原厂的RK3566平台的Buildroot【repo模式】
  • 【Java语言】继承和多态(一)
  • 第三百零九节 Java JSON教程 - JSON语法
  • 华为 HCIP-Datacom H12-821 题库 (41)
  • 【北京迅为】《STM32MP157开发板嵌入式开发指南》-第七十章 Buildroot制作根文件系统
  • 约瑟夫环问题——4个解法总结(C语言)
  • HTMLCSS:旋转的动态卡片
  • LInux系统编程(二)操作系统和进程
  • 锁策略, cas 和 synchronized 优化过程
  • Python爬虫详解:原理、常用库与实战案例
  • 【刷题13】链表专题
  • 使用WebAssembly优化Web应用性能
  • nodejs入门教程20:nodejs文件系统
  • uniapp-vue3比对筛选
  • 软件测试基础三(前端知识)
  • Elastix-基于ITK的医学图像配准库
  • Java中对象的转移(1)——序列化与反序列化
  • 初探Flink的序列化
  • 手撕快排的三种方法:让面试官对你刮目相看
  • 到底要不要用SAP Screen Personas
  • Unity中的屏幕坐标系
  • Matlab车牌识别课程设计报告模板(附源代码)
  • 【OJ题解】C++实现反转字符串中的每个单词
  • Excel函数CUnique连接合并指定区域的唯一值