首页 > 试题广场 >

下面代码的输出结果是什么?

[单选题]
下面代码的输出结果是什么?
public class ZeroTest {
    public static void main(String[] args) {
     try{
       int i = 100 / 0;
       System.out.print(i);
      }catch(Exception e){
       System.out.print(1);
       throw new RuntimeException();
      }finally{
       System.out.print(2);
      }
      System.out.print(3);
     }
 }
  • 3
  • 123
  • 1
  • 12
推荐
1、inti = 100/ 0; 会出现异常,会抛出异常,System.out.print(i)不会执行,
2、catch捕捉异常,继续执行System.out.print(1);
3、当执行 thrownewRuntimeException();  又会抛出异常,这时,除了会执行finally中的代码,其他地方的代码都不会执行
编辑于 2015-12-29 14:35:20 回复(10)
还是需要理解Try...catch...finally与直接throw的区别:try catch是直接处理,处理完成之后程序继续往下执行,throw则是将异常抛给它的上一级处理,程序便不往下执行了。本题的catch语句块里面,打印完1之后,又抛出了一个RuntimeException,程序并没有处理它,而是直接抛出,因此执行完finally语句块之后,程序终止了
发表于 2015-09-05 20:07:32 回复(14)
首先执行try,遇到算术异常,抛出,执行catch,打印1,然后抛出RuntimeException,缓存异常,执行finally,打印2,然后抛出RuntimeException。
如果catch中没有抛出RuntimeException,则执行结果为123。

发表于 2015-09-04 11:22:49 回复(15)
100/0会触发Arith异常,进入catch打印1,接下来catch抛出异常,但在此之前finally会限制性,打印2。最后程序异常结束,3不会被打印。
发表于 2018-09-02 08:32:07 回复(2)
try/catch是捕获并处理异常,捕获异常的目的就是为了继续向后执行;
throw是抛出异常,告诉调用者我有异常走不下去了,你看着办吧,throw之后方法返回;
finally是“处理完异常之后”“抛出异常之前”首先必须执行的代码段。


该题虽然捕获了异常,但是在处理异常时候又抛出一个异常,所以执行完finally之后就方法返回了。
发表于 2017-03-29 11:02:45 回复(0)
选项全错 因为
catch(Exception e)
少了个{
发表于 2015-04-17 21:22:27 回复(5)
重点在于第八行的 thrownewRuntimeException() ,这句的意思就是抛出异常,所以然后只会执行finally块,而不会再执行其他语句。
发表于 2021-03-10 14:19:11 回复(0)
考察 Java 的 异常模型,该机制使得程序把 在正常执行过程中做什么事的代码 出了问题怎么办的代码 相分离,并且其采用的是终止模型。本题如果将 catch 子句中的“ throw new RuntimeException();”去掉,则输出为“123” 。关于 异常模型中关于 “try...catch...finally”更详细的阐释,请参见我的博文《 Java 异常模型综述 》:
“http://blog.csdn.net/justloveyou_/article/details/52551712”。
编辑于 2016-12-05 17:20:47 回复(0)
当执行try{}时,遇到算算术异常,然后抛出异常,catch捕捉到异常,打印出1,最后执行finally打印2
编辑于 2015-12-29 14:34:04 回复(4)
int i = 100 / 0; 报错/by zero 然后抛了
RuntimeException 就不继续往下执行了
发表于 2015-04-13 12:01:53 回复(0)
执行catch,缓存异常,执行final语句,然后程序不再向下执行。
若没有throw ,则执行catch ,final ,程序继续向下执行。
知识点:
try catch是捕获到异常之后处理。
throw 是捕获到异常之后交给上一级处理,程序不再向下执行。
发表于 2017-05-31 10:30:31 回复(0)
为什么编译能通过啊,不是编译的时候先把100/0的结果先算出来吗,求大神
发表于 2015-10-20 10:54:20 回复(2)

try里面执行完第一行之后,出现异常就直接被catch捕获,输出1,然后执行finally代码部分,输出2,接着抛出了一个RuntimeException,但是程序没有处理。因为出现了异常,程序执行完finally后就直接终止了,所以最后没有输出到3,所以最后输出了12,答案是D选项。

编辑于 2022-04-18 11:00:11 回复(0)
虽然抛出了异常程序不会处理(交给jvm了),但是还是会执行finally,也就是说先输出1,让后抛出异常的语句,之后再打印输出2
所以结果是12
发表于 2019-07-01 15:17:32 回复(0)
D
因为/by zero ,所以先 catch异常,根据打印语句输出1,然后执行finally中的打印语句,输出2
发表于 2015-09-04 14:19:18 回复(0)
d
发表于 2015-04-11 10:03:57 回复(0)
捕捉异常之后又抛出了异常所以没有打印3
发表于 2022-08-11 15:43:25 回复(0)
抛出异常之后执行完finally代码块程序就结束了,如果不抛出则会继续执行下面的代码。
发表于 2022-07-05 09:03:14 回复(0)
throw抛出异常,让上级处理。会杀掉程序。finally还会继续执行
发表于 2022-02-03 17:52:11 回复(0)
class ZeroTest {
    public static void main(String[] args) {
        try {
            // ①先执行100/0,抛出java.lang.ArithmeticException异常
            int i = 100 / 0;
            System.out.print(i);
        } catch (Exception e) {
            // ②抛出的java.lang.ArithmeticException异常被catch块捕获
            // 执行System.out.print(1);打印输出 1
            System.out.print(1);
            // ③直接抛出RuntimeException异常
            throw new RuntimeException();
        } finally {
            // ④到finally块中执行最后的语句,打印输出 2
            System.out.print(2);
        }
        // 因为直接抛出异常,所以程序被终止了,这里无法继续执行
        System.out.print(3);
    }
}
发表于 2021-03-09 14:06:55 回复(0)
在 try {
} catch(Exception e) {
} finally {
} 中,try {} 中出现异常,后面的代码不会执行,直接执行 catch() {} 代码块中的代码,在 catch() {} 代码块中 throw 出异常,只会执行 finally {} 代码块中的代码,不会执行 finally {} 代码块后面的代码。
发表于 2020-07-23 13:15:41 回复(0)