流年似水博客开通了,本站主要是写关于Web和大数据方面内容,正在更新中,欢迎大家光临!
  1. 文章:97 篇
  2. 总浏览:35,060 次
  3. 评论:22条
  4. 最后更新:2020-06-08
  5. 分类目录:39 个

java之java中的try…catch…finally的运行机制你知道吗?

Java l, xy 593℃ 0评论

java中的try…catch…finally的运行机制你知道吗?

前言:

  1. 在面试的时候总会出现各种各样的问题,有些是开发中不经常用到的。但是面试官总会问这些问题。
  2. 比如我们的异常处理这里 try...catch...finally 特殊用法

面试题:

  1. 求运行函数返回的结果:
  2. public static int getResult(){
  3. try {
  4. return 1;
  5. } catch (Exception e) {
  6. return 2;
  7. }finally{
  8. return 3 ;
  9. }
  10. }

解题所需知识点:

  1. 1. 只有当try代码块发生异常的时候,才会执行到catch代码块
  2. 2. 不管try中是否发生异常,finally都会执行。
  3. 以下两种情况例外:
  4. 一:try中不发生异常时,try块中有System.exit(0);
  5. 二:try中发生异常时,catch中有System.exit(0);
  6. 说明:System.exit(0) 代码的作用的退出虚拟机;
  7. 3. finally块内有return语句,则以finally块内的return为准
  8. 说明:
  9. 如果try 或者 catch内也有return 其实是先执行了try 或者 catch代码块中的return语句的,
  10. 但是由于finally的机制,执行完try或者catch内的代码以后并不会立刻结束函数,还会执行finally块代码,
  11. finally也有return语句,则会覆盖try块或者catch块中的return语句

解题:

  1. 1.首先,try块中的代码不会发生异常,所以不会执行到catch块的代码,即排除return 2
  2. 2.执行完try块代码(虽然try块有return语句,但是由于finally机制,并不会直接退出函数),
  3. 接着执行finally块代码(finally块也有return语句,所以会覆盖掉try块的return语句),所以执行完该函数返回的结果为3

附加知识点:

  1. 1.finally代码块中有return语句,则屏蔽cath代码块中抛出的异常
  2. 例如:
  3. public static int getResult1() {
  4. int i = 0;
  5. try {
  6. int c = 2 / i;
  7. } catch (Exception e) {
  8. i = 10;
  9. throw e;
  10. } finally {
  11. i = 20;
  12. return i;
  13. }
  14. }
  15. 说明:调用该函数不会发生异常,因为catch代码块内的throw e 语句抛出的异常被 finally代码块的return语句屏蔽了

转载请注明:流年似水 » java之java中的try…catch…finally的运行机制你知道吗?

喜欢 (1)or分享 (0)

Warning: copy(https://cn.gravatar.com/avatar/?s=54&d=%2Fwp-content%2Fthemes%2Fyusi1.0%2Fimg%2Fdefault.png&r=g): failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request in /usr/share/nginx/html/timewentby/wp-content/themes/yusi1.0/functions.php on line 239

Warning: copy(/wp-content/themes/yusi1.0/img/default.png): failed to open stream: No such file or directory in /usr/share/nginx/html/timewentby/wp-content/themes/yusi1.0/functions.php on line 243
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址