博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于Java异常处理的一个有趣的代码的分析
阅读量:4961 次
发布时间:2019-06-12

本文共 2766 字,大约阅读时间需要 9 分钟。

看了这个博客一开始并没有理解博主的代码的意思

代码如下:

package Test;    public class TestException {      public TestException() {      }        boolean testEx() throws Exception {          boolean ret = true;          try {              ret = testEx1();          } catch (Exception e) {              System.out.println("testEx, catch exception");              ret = false;              throw e;          } finally {              System.out.println("testEx, finally; return value=" + ret);              return ret;          }      }        boolean testEx1() throws Exception {          boolean ret = true;          try {              ret = testEx2();              if (!ret) {                  return false;              }              System.out.println("testEx1, at the end of try");              return ret;          } catch (Exception e) {              System.out.println("testEx1, catch exception");              ret = false;              throw e;          } finally {              System.out.println("testEx1, finally; return value=" + ret);              return ret;          }      }        boolean testEx2() throws Exception {          boolean ret = true;          try {              int b = 12;              int c;              for (int i = 2; i >= -2; i--) {                  c = b / i;                  System.out.println("i=" + i);              }              return true;          } catch (Exception e) {              System.out.println("testEx2, catch exception");              ret = false;              throw e;          } finally {              System.out.println("testEx2, finally; return value=" + ret);              return ret;          }      }        public static void main(String[] args) {          TestException testException1 = new TestException();          try {              testException1.testEx();          } catch (Exception e) {              e.printStackTrace();          }      }  }

  查了好多资料都没有查出结果,困扰了我两天后,我突然意识到一个问题。

boolean testEx2() throws Exception {          boolean ret = true;          try {              int b = 12;              int c;              for (int i = 2; i >= -2; i--) {                  c = b / i;                  System.out.println("i=" + i);              }              return true;          } catch (Exception e) {              System.out.println("testEx2, catch exception");              ret = false;              throw e;          } finally {              System.out.println("testEx2, finally; return value=" + ret);              return ret;          }      }

 

这个方法执行中一定会抛出异常的,这是没毛病的,但是为什么调用他的调用者会接收不到这个异常呢?

我的猜想如下:

  问题就在于finally里面的一个return ret; 这样写代码的方式肯定是有问题的。finally中的代码是无论如何都要执行的。

所以,上面的那个方法是无论如何都有返回值的,这时候他的调用者接收到了他想要的返回值,就会误认为这个方法正确执行了,也就不会catch任何异常了。

 

不知道有没有人有更高明的理解,希望大佬们教教我,带我飞。

转载于:https://www.cnblogs.com/zuosy/p/6848266.html

你可能感兴趣的文章
让ul li 或者table 进行循环往上滚屏
查看>>
Docker安装 小记
查看>>
mysql中的高级查询
查看>>
Spacebuilder在Mono上运行修改备忘
查看>>
java @param参数注解
查看>>
面向接口编程详解(三)——模式研究
查看>>
性能调优之SQL优化
查看>>
python几个时间函数
查看>>
Sql Server 2005如何导入DBF文件?
查看>>
数据库的相关概念
查看>>
XtraReport三动态数据绑定
查看>>
获取动态代理对象
查看>>
GDCPC 2017 省赛小结
查看>>
Putty配置
查看>>
How to install maps and addons (.VPK)
查看>>
Cookie和Session详解
查看>>
汇编实验四
查看>>
DB_NAME DB_UNIQUE_NAME 和 SID 的理解
查看>>
基于epoll的tcpip的服务端
查看>>
BBC.万物与虚无.Everything.and.Nothing
查看>>