当前位置: 代码迷 >> java >> 有人可以帮助我了解Java中try-catch块的工作方式吗?
  详细解决方案

有人可以帮助我了解Java中try-catch块的工作方式吗?

热度:21   发布时间:2023-07-17 20:24:25.0

对于在座的大多数人来说,这可能是一个非常愚蠢的问题,对此深表歉意。 我是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块中生成另一个异常之后,控件将去哪里? 任何帮助将不胜感激 !

您程序的输出将是

    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原因。

有关异常处理的一些要点:

1.将可能导致异常的代码放在try{}块中。
2.使用catch块捕获适当的异常。
3.在捕获异常时,最好使用更具体的类型异常,而不是像捕获一般异常。 例如,您捕获了Exception ,在这种情况下,您可能捕获了更具体的类型异常ArithmeticException
4.即使您在catchtry块中使用return语句, finally块也始终执行。
5.方法throwscatch异常。 如果方法catch到异常,则不需要throws该异常。
6.不需要使用catch-block处理所有异常。 我们可以避免对诸如ArithmeticExceptionNullPointerExceptionArrayIndexOutOfBoundsException类的unchecked exception使用try-catch块。 看到更多。

您也可以查看该教程,以了解有关更多信息。

  相关解决方案