首页 > 试题广场 >

分析以下代码,说法正确的是() public static

[单选题]
分析以下代码,说法正确的是()
 public static void main(String[] args) {
     System.out.println(val());
 }
 
 public static int val() {
     int num = 5;
     try {
     num = num / 0;
 } catch (Exception e) {
     num = 10;
 } finally {
     num = 15;
 }
 return num;
 }

  • 运行时报错
  • 程序正常运行,输出值为5
  • 程序正常运行,输出值为10
  • 程序正常运行,输出值为15
情况1: try{} catch(){}finally{} return;
显然程序按顺序执行。

情况2: try{ return; }catch(){} finally{} return;

先执行try块中return 语句(包括return语句中的表达式运算),但不返回;
执行finally语句中全部代码
最后执行try中return 返回
finally块之后的语句return不执行,因为程序在try中已经return。
情况3: try{ } catch(){return;} finally{} return;
1、程序先执行try,如果遇到异常执行catch块,

有异常:
执行catch中return语句,但不返回
执行finally语句中全部代码,
最后执行catch块中return返回。 finally块后的return语句不再执行。
无异常:执行完try再finally再return…
情况4: try{ return; }catch(){} finally{return;}

执行try块return语句(包括return语句中的表达式运算),但不返回;
再执行finally块,
执行finally块,有return,从这里返回。
此时finally块的return值,就是代码执行完后的值

情况5: try{} catch(){return;}finally{return;}

程序执行catch块中return语句(包括return语句中的表达式运算),但不返回;
再执行finally块,
执行finally块,有return,从这里返回。
情况6: try{ return;}catch(){return;} finally{return;}
1、程序执行try块中return语句(包括return语句中的表达式运算),但不返回;

有异常:

执行catch块中return语句(包括return语句中的表达式运算),但不返回;
再执行finally块
执行finally块,有return,从这里返回。
无异常:

再执行finally块

执行finally块,有return,从这里返回。。
-------------------------------------------------------------------------------------------------------

发表于 2019-09-18 10:22:15 回复(19)
针对不同情况,我标记运算过程,至于理论,评论小飞龙说的很详细了,我就不凑热闹了。
情况1:


情况2:



情况3:

基本上大家讨论的都是这三种情况之一,应该是够了.如果有问题欢迎讨论。
发表于 2020-03-26 17:41:35 回复(5)
无论有无异常,finally块中的代码一定会执行且在最后执行,因此num输出为15
发表于 2019-08-11 18:26:25 回复(4)
没有异常:try-finally 有异常:try-catch-finally 当遇到return后,先执行finally,再return,如果在finally中return了,就直接return。
发表于 2022-06-09 17:36:15 回复(0)
finally语句一定会执行,所以打印15
发表于 2019-08-23 10:07:41 回复(0)
   源代码:捕获到除零异常,程序可以继续向下执行。


public static void main(String[] args) {
        System.out.println(val());
    }
    public static int val() {
        int num = 5;
        try {
            num = num / 0;
        } catch (Exception e) {
            //e.printStackTrace();

            num = 10;
        } finally {
            num = 15;
        }
        return num;
    }







编辑于 2022-02-03 17:48:25 回复(0)
/**
  * 情况1: try{} catch(){}finally{} return;
  * 显然程序按顺序执行。
  * @return 15
  */
 public static int val1() {
  int num = 5;
  try {
   num = num / 0;
  } catch (Exception e) {
   num = 10;
  } finally {
   num = 15;
  }
  return num;
 }

 /**
  * 情况2: try{ return; }catch(){} finally{} return;
  * 先执行try块中return 语句(包括return语句中的表达式运算),但不返回;
  * 执行finally语句中全部代码
  * 最后执行try中return 返回
  * 显然程序按顺序执行。
  * @return 5
  */

 public static int val2() {
  int num = 5;
  try {
   return num;
  } catch (Exception e) {
   num = 10;
  } finally {
   num = 15;
  }
  return num;
 }


 /**
  * 情况3: try{ } catch(){return;} finally{} return;
  * 执行catch中return语句,但不返回
  * 执行finally语句中全部代码,
  * 最后执行catch块中return返回。 finally块后的return语句不再执行
  * @return 10
  */
 public static int val3() {
  int num = 5;
  try {
   num = num / 0;
  } catch (Exception e) {
   return num = 10;  //执行finally后再返回自己
  } finally {
   num = 15;  //会执行
  }
  return num;
 }


 /**
  * 情况4: try{ return; }catch(){} finally{return;}
  * 执行try块return语句(包括return语句中的表达式运算),但不返回;
  * 再执行finally块,
  * 执行finally块,有return,从这里返回。
  * @return  15
  */
 public static int val4() {
  int num = 5;
  try {
   return num = 8;
  } catch (Exception e) {
   num = 10;
  } finally {
   return num = 15;
  }
 }

 /**
  * 情况5: try{} catch(){return;}finally{return;}
  * 程序执行catch块中return语句(包括return语句中的表达式运算),但不返回;
  * 再执行finally块,
  * 执行finally块,有return,从这里返回。
  * @return 15
  */
 public static int val5() {
  int num = 5;
  try {
     num =num/0;
  } catch (Exception e) {
   return num = 10;
  } finally {
   return num = 15;
  }
 }

 /**
  * 情况6:同上 try{ return;}catch(){return;} finally{return;}
  * 有异常:
  *
  * 执行catch块中return语句(包括return语句中的表达式运算),但不返回;
  * 再执行finally块
  * 执行finally块,有return,从这里返回。
  * 无异常:
  *
  * 再执行finally块
  *
  * 执行finally块,有return,从这里返回。。
  * @return
  */

发表于 2022-04-01 13:28:56 回复(1)
话说 finally里面没有return,最后不会返回finally里面的值吧,正确应该是返回之前压栈的值10吧
发表于 2019-09-11 11:14:02 回复(2)
try和catch两位大佬执行完毕后
都需要finally小弟在后面帮忙擦屁股
编辑于 2020-04-24 12:06:33 回复(0)
源代码先运行try代码块的内容,因为除零异常被catch捕获,然后执行catch代码块内代码,由于最后还有一个finally代码块,finally的赋值操作覆盖了catch语法块内对num的赋值,最终赋值结果与finally中一样
发表于 2022-09-07 12:15:07 回复(0)
这种垃圾题目让我答错,我一点也不觉得羞愧。这么垃圾得出题思路,简直浪费时间。就是把“try{” 缩进了。我劝出这种题目得傻子老师别干我们这一行。程序员考得应该是逻辑思维能力。
发表于 2022-02-22 17:26:04 回复(1)
没有return啊,为什么会输出啊?求大佬解惑。
发表于 2021-01-18 23:11:02 回复(1)
java.lang.ArithmeticException是运行时异常
编辑于 2024-03-11 17:12:02 回复(0)
try 首先不能单独使用
try {} catch{}
try {}  finally{}
try {} catch{} finally{}
发表于 2022-11-05 19:04:42 回复(0)
try中报错的代码前面执行,后面不执行 catch后的代码正常执行
发表于 2022-09-15 17:26:50 回复(0)
首先执行try里面的语句,除数不能为0发生异常,接着执行catch语句,此时num的值为10,紧接着执行finally语句,num的值被重赋值为15,执行return num语句返回num的值为15,并打印出15。
发表于 2022-08-21 08:03:32 回复(0)
finally无论如何是一定会执行的
发表于 2022-05-19 23:54:49 回复(0)
具体看小飞龙解析,finally块里有return的话不用管别人,从这里返回值。

发表于 2022-03-02 15:06:32 回复(0)
num/0,会抛出除0异常,异常可被try-catch捕获;
finall语句:不论try-catch是否捕获其异常,都会执行;
Error不是异常,不能捕获。
发表于 2021-12-31 10:12:31 回复(0)
丢 为啥我做的时候只有a和b两个选项 对答案的时候就有四个选项了
发表于 2021-11-08 23:06:19 回复(0)