首页 > 试题广场 >

以下代码执行的结果显示是多少()?

[单选题]
以下代码执行的结果显示是多少()?
public class Demo{
    public static void main(String[] args){
        System.out.print(getNumber(0));
        System.out.print(getNumber(1));
        System.out.print(getNumber(2));
        System.out.print(getNumber(4));
    }

    public static int getNumber(int num){
        try{
            int result = 2 / num;
            return result;
        }catch (Exception exception){
            return 0;
        }finally{
            if(num == 0){
                return -1;
            }
            if(num == 1){
                return 1;
            }
        }
    }    
}


  • 0110
  • -1110
  • 0211
  • -1211
finally一定会在return之前执行,但是如果finally使用了return或者throw语句,将会使trycatch中的return或者throw失效
发表于 2017-09-01 10:20:39 回复(14)
try,catch,finally中:
num=0,捕获异常,执行catch语句,catch中返回0,执行finally语句,finally语句中返回-1,于是返回finally中的-1;
num=1,try中返回2,执行finally语句,finally语句中返回1,于是返回finally中的1;
num=2,try中返回1,执行finally语句,finally语句中没有返回,于是返回try中的1;
num=4,try中返回0,执行finally语句,finally语句中没有返回,于是返回try中的0.
发表于 2018-04-02 14:54:37 回复(11)
泛头像
规则:
    1.try块是必须的,catch块和finally块都是可选的,但必须存在一个或都存在。try块不能单独存在。
    2.try块里的语句运行中出现异常会跳过try块里其他语句,直接运行catch里的语句。
    3.无论try块中是否有异常,无论catch块中的语句是否实现,都会执行finally块里的语句。
    4.如果try块或catch块中有return语句,finally块里的语句会执行在try块或catch块中的return语句前。
    5.如果finally块里有return语句,则直接返回,而不执行try块或catch块里的return语句。
    6.只有一种办法不执行finally块里的语句,那就是调用System.exit(1);方法,即退出java虚拟机。

    强调:finally块里的语句在try或catch里的人return前执行!!!
发表于 2018-12-31 11:30:23 回复(12)
finally中return语句会覆盖try-catch中的return语句

发表于 2017-08-20 09:26:37 回复(15)
这个问题还是finally什么时候执行的问题,根据jvm中的运行原理,最精确的来说,finally是在try里面return语句的中间执行的,但是finally一定会执行,也就是说在try的语句中如果有return后面有语句,就会就会执行return后,便跳到finally执行finally的语句块,所以getNumber(0或1)肯定是1和-1(说的有点绕,待会看完代码就明白了)。
后面两个就不用解释了,全都是返回result,4/2=2,2/4=0.5,由于是int/int,则结果也为int类型,得到0.5就会丢失精度,因此结果为0.

发表于 2017-09-12 20:23:10 回复(1)
当try块中包含return语句时,在执行return语句前会先执行finally块,如果finally块中也有return语句,这个return语句的返回值会将try块中return语句的返回值覆盖掉。

发表于 2020-03-07 12:24:55 回复(1)
-1110 前两个finally 中覆盖 三四个中finally 没有对应的 所以不return 则是前面的返回 而int类型2/4为 0 所以答案是-1110
发表于 2017-09-04 20:39:02 回复(0)
第一个num=0,进入方法后 int result= 2/0 肯定会捕获异常异常,也就是会执行catch块代码,因为有finally,所以catch块中的return需要等finally执行完才会执行,由于finally中return了值,getNumber(int num)这个方法就结束了,返回值是-1,所以输出-1 ; 第二个num=1,进入方法后int result=2/1 ,得到result=2 ,还是同理,因为有finally ,所以会先执行finally中的代码然后才执行try块中的return result,所以返回1,输出1 ; 第三个num=2 ,int result=2/2=1 ,同理,先执行finally ,但finally中的条件都不满足,执行完后执行try中return result , 也就是返回1,输出1; 第四个num=3,int result=2/3=0 ,同理,先执行finally ,但finally中的条件都不满足,执行完后执行try中return result , 也就是返回0,输出0; 最后结果就是: -1110 选B
发表于 2019-12-21 00:09:01 回复(0)
发表于 2021-06-24 09:49:09 回复(0)
1.不管有没有出现异常,finally块中代码都会执行;
2.当finally里面没有return语句时,执行try 和finally语句之后最后再执行return;
3.finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;
4.finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。
发表于 2019-09-10 19:59:07 回复(0)
个人觉得答案是B吧。
发表于 2017-08-18 01:11:27 回复(1)
try,catch,finally中 finally一定会在return之前执行 若执行了finally中的return或者throw,则会使try,catch中ruturn或者throw失效
发表于 2022-05-29 11:29:50 回复(0)
不会只有我以为final判断的是result吧
发表于 2021-12-09 10:59:36 回复(0)
try中无异常则跳过catch执行final,若final无结果则执行try中return语句,反之执行final中return语句
发表于 2021-09-20 21:17:43 回复(0)
如果try中内容和finally中内容冲突,优先执行finally
发表于 2021-03-25 16:54:54 回复(0)
try-catch中方法执行完后,如果有finally代码块,会继续执行finally代码块中的方法,最后的return语句能够有效执行。
发表于 2021-03-13 08:35:49 回复(0)

finaly 中若是对result重新赋值,返回的还是try中的值

             若是return 1 ,返回的是finally中值,不是try中的return

发表于 2020-08-09 17:45:44 回复(0)
finally一定会在return之前执行,但是如果finally使用了return或者throw语句,将会使trycatch中的return或者throw失效
发表于 2020-07-21 09:41:56 回复(0)
finally语句块一定会执行,如果finally中使用了return语句或者throw语句,将会使try catch 语句块中的return或throw失效。
发表于 2019-05-15 00:44:31 回复(0)
切记,切记,finally比return语句先执行
发表于 2018-10-28 20:06:34 回复(0)