enter code here
`class Rethrow
{
public static void genException()
{
int n[]={4,8,16,32,64,128};
int d[]={2,0,8,0,4};
for(int i=0;i<n.length;i++)
{
try{
System.out.println("n/d is:"+n[i]/d[i]);
}
catch(ArithmeticException exc)
{
System.out.println("Cant Divide By Zero");
throw exc;
}
catch(ArrayIndexOutOfBoundsException exc)
{
System.out.println("No match element found ");
// rethrow the exception
}
}
}
}
class RethrowDemo
{
public static void main(String args[])
{
try
{
Rethrow.genException();
}
catch(ArithmeticException exc) // catch the rethrow Exception
{
// recatch exception
System.out.println("Fatal Error "+"Program Termiated.");
}
}
}
问题1 ::为什么要抓住&#34; RethrowDemo&#34; CLASS终止了&#34; Rethrow&#34;的catch(算术异常)引发的异常。类。
问题2 ::控制转移如何工作?
答案 0 :(得分:0)
在Java中,当发生中断应用程序的正常流的事件时,会创建一个Exception
对象,并将其传递给调用堆栈,以便由调用者处理或进一步通过层次结构中更高层次的其他东西处理/处理。
由于您无法除以零,ArithmeticException
会从行System.out.println("n/d is:"+n[i]/d[i]);
中抛出try...catch
,因为您在catch(ArithmeticException exc)
块内执行此操作,你的ArithmeticException
说&#34;如果try
内有catch
,那么我就来处理它&#34;。
在Cant Divide By Zero
块中,您打印出main
,然后重新抛出原始异常。然后,这会调整为调用方法,在您的情况下为try...catch(ArithmeticException exc)
方法,但是因为您正在catch
内main
ArithmeticException
中说{&1}} 34;我将处理你刚刚重新抛出的Fatal Error Program Termiated
&#34;。此时您将打印{{1}}并结束应用程序。
有很多教程可以完全解释异常如何在Java中运行,因此查看一些内容会很有用。