Java 中抛出异常的语句有两种,分别是 throwthrows,本文将详细介绍这两个关键字的使用方法及其区别。

throw

throw 语句的格式为:

throw new 异常类名称(构造函数参数);

其中,异常类名称就是已定义的异常类,构造函数参数是为异常类的构造函数提供的参数。它可以为代码中的某个条件设置一个异常,并在需要的位置进行捕获和处理。

public static int divide(int numerator, int denominator) {
    if (denominator == 0) {
        throw new IllegalArgumentException("除数不可为0");
    }
    return numerator / denominator;
}

throws

Java 中的 throws 关键字用于声明可能会抛出哪些异常,它只是在方法签名中声明了方法可能抛出的异常,而并未实际抛出异常。格式为:

修饰符 返回类型 方法名(参数列表) throws 异常列表 {
    // 方法体
}

如果不添加 throws,那么这个方法抛出的异常只能被方法内部的 catch 语句所处理。

public void readFile(String filename) throws FileNotFoundException {
    File file = new File(filename);
    FileInputStream stream = new FileInputStream(file);
    // ...
}

throw和throws的区别

  1. 位置不同

    • throw 位于方法内部
    • throws 位于方法的签名处
  2. 内容不同

    • throw + 异常对象
    • throws + 异常的类型(可以多个类型,用逗号拼接)
  3. 作用不同

    • throw 在异常出现的源头,制造异常
    • throws 在方法的声明处,告诉方法的调用者,这个方法中可能会出现我声明的这些异常。然后调用者对这个异常进行处理:
      要么自己处理要么再继续向外抛出异常