首页 > 编程笔记 > Java笔记 阅读:13

Java throws抛出异常的用法(附带实例)

任何 Java 代码都有发生异常的可能性,如果方法不想对可能出现的异常做捕获处理,那么方法必须声明它可以抛出的这些异常,用于告知方法调用者此方法存在异常。

Java 通过 throws 子句声明方法可抛出的异常,throws 子句由 throws 关键字和要抛出的异常类两部分组成,如果需要抛出多个异常类,则异常类与异常类之间通过逗号隔开,其语法格式如下:
数据类型 方法名(参数列表) throws 异常类1,异常类2,…,异常类n{
    方法体;
}
方法一旦使用 throws 进行异常抛出,则表示当前方法不再对异常做任何处理,而是由方法调用者来进行处理。此时,无论原方法是否有异常发生,系统都会要求调用者必须对异常进行处理。

接下来,通过案例来演示 throws 关键字的使用。
public class Demo {
    public static void main(String[] args) {
        try {
            // 因为方法中声明抛出异常,不管是否发生异常,都必须处理
            final int divide = divide(5, 0); // 调用divide()方法
            System.out.println(divide); // 打印结果
        } catch (ArithmeticException e) {
            System.out.println("异常信息:" + e);
        }
        System.out.println("异常捕获结束");
    }

    // 声明抛出异常,本方法中可以不处理异常
    public static int divide(int x, int y) throws ArithmeticException {
        int result = x / y; // 定义一个变量result,记录两个数相除的结果
        return result; // 将结果返回
    }
}
程序的运行结果如下:

异常信息:java.lang.ArithmeticException: / by zero
异常捕获结束

程序中定义 divide() 方法时,使用了 throws 关键字声明抛出 ArithmeticException 异常。main() 方法调用该方法时,使用了 try-catch 对异常进行捕获处理,因此程序才可以正常编译运行。

throws 子句不仅可以在方法处声明拋出异常,在方法的调用者处也可以声明。如果主方法使用 throws 声明抛出异常,则异常会被 Java 虚拟机进行处理(Java 虚拟机处理会导致程序终止)。

接下来,通过案例来演示上述情况:
public class Demo {
    // main()方法中不做处理,继续向上抛出异常
    public static void main(String[] args) throws ArithmeticException {
        // 主方法在调用时未做捕获处理,因此JVM会直接报异常
        final int divide = divide(5, 0); // 调用divide()方法
        System.out.println(divide); // 打印结果
        System.out.println("程序结束");
    }

    // 下面的方法实现了两个整数相除
    public static int divide(int x, int y) throws ArithmeticException {
        int result = x / y; // 定义一个变量result,记录两个数相除的结果
        return result; // 将结果返回
    }
}
程序的运行结果如下:

Exception in thread "main" java.lang.ArithmeticException: / by zero
at com.aaa.p080501.Test.divide(Test.java:14)
at com.aaa.p080501.Test.main(Test.java:7)

程序中在使用 main() 方法调用 divide() 方法时,并没有对异常进行捕获处理,而是使用 throws 关键字继续声明抛出异常。

从执行结果中可以发现,程序虽然正常通过编译,但在运行时因为没有对异常进行处理,所以导致程序终止。由此可知,在 main() 方法中使用 throws 关键字抛出异常,程序一旦出现异常会由 Java 虚拟机进行处理,这将导致程序执行中断。

相关文章