throws 是 Java 中用于在方法声明处预告可能抛出检查型异常的关键字,它不处理异常而是将处理责任移交调用者;必须声明继承自 Exception 但非 RuntimeException 的异常,如 IOException、SQLException;而 throw 是在方法体内实际抛出异常对象的语句。
throws 是 Java 中用于在方法声明处“预告”该方法可能抛出检查型异常(checked exceptions)的关键字。它不处理异常,而是把异常的处理责任明确交给调用者——相当于签了一份“异常处理合同”。
它出现在方法签名末尾,语法为:
返回类型 方法名(参数) throws 异常类1, 异常类2 { ... }
比如:
public void loadConfig() throws IOException, SQLExceptionpublic User findById(int id) throws UserNotFoundException(自定义异常)一旦这样声明,编译器就会强制要求:任何调用这个方法的代码,必须用 try-catch 捕获这些异常,或者在其自身方法上继续用 throws 声明。这是 Java 对检查型异常的强制约束机制。
只有检查型异常(checked exceptions)需要显式声明,即继承自 Exception 但不继承自 RuntimeException 的类。常见例子包括:
IOException(文件、网络操作)SQLException(数据库访问)ClassNotFoundExceptionException 的异常类而 RuntimeException 及其子类(如 NullPointerException、IllegalArgumentException)属于非检查型异常,编译器不强制声明,可选加 throws,但通常不写。
容易混淆,但角色完全不同:
if (age
体对象,也不执行动作。一句话记牢:throw 是“扔”,throws 是“说‘我可能会扔’”。一个动手,一个预告。
不是所有地方都适合加 throws,合理使用才能让代码清晰健壮:
throws Exception 这种宽泛声明