Java 异常处理

Java Exception Handlng

我正在尝试更好地理解异常处理。我已经阅读了我的书并用谷歌搜索了它,但是这段代码对我来说没有意义。在进入此代码块之前我理解的方式是,如果用户输入无效数字或 0,则 throw new ArithmeticException 将异常抛出到 catch 块,catch 块会处理它,然后执行继续正常进行。当我 运行 这段代码时, catch block 中的代码被执行,而不是 throw new ArithmeticException 代码。所以我的两个问题是,为什么 throw new ArithmeticException 代码也没有执行,以及为什么针对同一问题显示两条不同的错误消息...?

import java.util.Scanner;

public class App2 {

    public static int quotient(int number1, int number2)
    {
        if (number2 == 0)
        {
            throw new ArithmeticException("divisor cannot be zero");
        }

        return number1 / number2;
    }

    public static void main(String[] args)
    {

        Scanner input = new Scanner(System.in);

        System.out.println("enter two integers");

        int number1 = input.nextInt();
        int number2 = input.nextInt();

        try
        {
            int result = quotient(number1, number2);
            System.out.println(result);
        }
        catch (ArithmeticException ex)
        {
            System.out.println("exception: integer can't be divided by 0");
        }

        System.out.println("execution continues");
    }
}

消息"divisor cannot be zero"不显示只是因为抛出异常

如果 捕获到异常,您只会看到此消息。您会在堆栈跟踪(错误消息)中看到它。

如果你摆脱 try-catch 块然后尝试它,这就是你应该看到的:

Exception in thread "main" java.lang.ArithmeticException: divisor cannot be zero

您还可以删除以下代码:

    catch (ArithmeticException ex)
    {
        System.out.println("exception: integer can't be divided by 0");
    }

因为它已经在方法中表达并且会是多余的。不影响代码。只是让您知道,以防您想清理代码。

-曼尼