问题描述
对于在座的大多数人来说,这可能是一个非常愚蠢的问题,对此深表歉意。 我是Java的新手,而我正在阅读的书并未解释其中示例的工作原理。
public class CrazyWithZeros
{
public static void main(String[] args)
{
try
{
int answer = divideTheseNumbers(5, 0);
}
catch (Exception e)
{
System.out.println("Tried twice, "
+ "still didn't work!");
}
}
public static int divideTheseNumbers(int a, int b) throws Exception
{
int c;
try
{
c = a / b;
System.out.println("It worked!");
}
catch (Exception e)
{
System.out.println("Didn't work the first time.");
c = a / b;
System.out.println("It worked the second time!");
}
finally
{
System.out.println("Better clean up my mess.");
}
System.out.println("It worked after all.");
return c;
}
}
我无法弄清楚在divideTheseNumbers()
方法的catch块中生成另一个异常之后,控件将去哪里?
任何帮助将不胜感激 !
1楼
您程序的输出将是
Didn't work the first time.
Better clean up my mess.
Tried twice, still didn't work!
Didn't work the first time.
-由于divideTheseNumbers
中的catch块
Better clean up my mess.
-由于divideTheseNumbers
中的finally块
Tried twice, still didn't work!
-由于main
方法中的catch块。
通常,当从方法抛出异常并且如果不在try
块中时,它将被抛出给它的调用方法。
有两点需要注意:
1)任何不在
try
块中的异常都将被抛出给它的调用方法(即使它在catch
块中)2)
finally
块始终执行。
在您的情况下,您将在catch
块中获得第二个异常,因此将引发该异常。
但是在退出任何方法之前,它还将执行finally
块(最终总是执行块)。
这就是为什么还会打印“ Better clean up my mess
原因。
2楼
有关异常处理的一些要点:
1.将可能导致异常的代码放在try{}
块中。
2.使用catch
块捕获适当的异常。
3.在捕获异常时,最好使用更具体的类型异常,而不是像捕获一般异常。
例如,您捕获了Exception
,在这种情况下,您可能捕获了更具体的类型异常ArithmeticException
。
4.即使您在catch
或try
块中使用return
语句, finally
块也始终执行。
5.方法throws
或catch
异常。
如果方法catch
到异常,则不需要throws
该异常。
6.不需要使用catch-block
处理所有异常。
我们可以避免对诸如ArithmeticException
, NullPointerException
, ArrayIndexOutOfBoundsException
类的unchecked exception
使用try-catch块。
看到更多。
您也可以查看该教程,以了解有关更多信息。