Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
core-java异常处理_Java_Exception - Fatal编程技术网

core-java异常处理

core-java异常处理,java,exception,Java,Exception,下面是一个类问题,它是传播异常处理机制,期望的输出是异常。任何人都可以解释为什么输出是异常,提前感谢 Class Question { public void m1() throws Exception { try { m2(); } finally { m3(); } } public void m2() throws RuntimeException { throw new RuntimeException(); }

下面是一个类问题,它是传播异常处理机制,期望的输出是异常。任何人都可以解释为什么输出是异常,提前感谢

 Class Question {

  public void m1() throws Exception {

   try {

    m2();

   } finally {

    m3();

   }
  }
  public void m2() throws RuntimeException {

   throw new RuntimeException();

  }

  public void m3() throws Exception {

   throw new Exception();

  }
  public static void main(String[] args) throws Exception {

   Question q = new Question();

   try {

    q.m1();

   } catch (RuntimeException re) {

    System.out.println("RuntimeException");

   } catch (Exception e) {

    System.out.println("Exception");
   }
  } 

以下步骤是程序执行的一部分:

(1)
main()
调用
m1()

(2)
m1()
method
try
block调用m2(),它抛出
RuntimeException

(3)
m1()
方法
最后
块调用m3(),它抛出
异常

(4)
Exception
将被抛出回调用方方法
main()

(5) 在
main()
方法中,将捕获对象
Exception
并打印字符串“Exception”

关键点是,即使存在
异常
(在代码中,
try
块抛出
try
块抛出
RuntimeException
),也始终执行
finally

如果在finally block中调用m2()方法,那么输出是什么

在这种情况下,输出将是
RuntimeException

期望的输出是异常的。有人能解释为什么输出是异常的吗 例外情况

因为
finally
是在
try
之后执行的最后一个块:

finally {
   m3();
}

因此,您得到的是
Exception
而不是
RuntimeException

,因为当执行finally语句时,
m3()
被调用并抛出
Exception

因此,即使在finally语句到达之前出现了
RuntimeException
,如果finally子句还引发另一个异常,则不考虑
RuntimeException

从:

如果有任何包含try语句(§14.20)的try块 包含throw语句,然后是那些try的任何finally子句 语句在控件向外传输时执行,直到 抛出的值被捕获注意,突然完成一个 子句可以中断由抛出启动的控制权转移 声明。


以下是该问题的程序执行情况:--

。第一个main()方法调用m1()

。m1()方法try块正在调用引发RuntimeException的m2()

。然后m1()方法finally块调用m3(),它抛出异常

。异常将被抛出回main()(调用方方法)


。在main()方法中,异常将被捕获并打印。

在异常处理中,无论try块是否发生天气错误,最终块都将强制执行

这里的
m1()
调用try块中的
m2()
,而
m2()
抛出
RuntimeException
这里的控件返回到
m1()
,使用
RuntimeException
但最后在从try或catch块中重新调用控件之前,块将强制执行,这就是为什么
m3()
由finally Block调用,而
m3()
抛出
Exception
,这里作为对
m3()
抛出的
Exception
的响应将由
m1()
抛出。这就是为什么会出现
Exception
catch(Exception e)

最后,block强制执行。例如:

class Question {

  public void m1() throws Exception {

   try {


 // control forworded to finally block(if Available) before returning from try or catch block.
    return;

   } finally {

    m3();

   }
  }

  public void m3() throws Exception {

   throw new Exception();

  }
  public static void main(String[] args) throws Exception {

   Question q = new Question();

   try {

    q.m1();

   } catch (RuntimeException re) {

    System.out.println("RuntimeException");

   } catch (Exception e) {

    System.out.println("Exception");
   }
  } 

我希望它能帮助您理解异常处理,也能帮助您解决将来的问题。

因为m1
抛出异常
如果在finally block中调用m2()方法,输出是什么?如果在finally block中调用m2()方法,输出是什么?RuntimeException不是正确的答案,即使异常被捕获或最终未被捕获也将被调用…如果异常被catch块捕获,它将执行catch块语句,然后执行finally blockyes,当然,
catch
block(如果存在)将首先执行,然后执行
finally