在 Java 中,throws 不是用来“处理”异常的,而是用来“声明”异常的。它属于异常声明机制,配合 try-catch 才是完整的异常处理流程。下面从概念 → 流程 → 示例 → 与 throw 的区别 → 面试要点系统说明。
public void method() throws IOException {
...
}
含义:
当前方法可能抛出某种异常,但不在此方法内处理,而是交给调用者处理。
throws 声明异常类型mainpublic class Test {
public static void main(String[] args) throws Exception {
readFile();
}
static void readFile() throws Exception {
int a = 1 / 0; // 算术异常
}
}
readFile() 抛出异常
↓
main() 也没处理
↓
抛给 JVM
↓
程序终止 + 打印异常栈
public class Test {
public static void main(String[] args) {
try {
readFile();
} catch (Exception e) {
System.out.println("异常被处理了");
}
}
static void readFile() throws Exception {
int a = 1 / 0;
}
}
✅ 异常在 main 中被处理,程序不会崩溃
✅ 必须声明:
IOExceptionSQLExceptionException❌ 不强制声明:
RuntimeExceptionNullPointerExceptionIndexOutOfBoundsException(但可以声明,不推荐)
| 对比项 | throw | throws |
|---|---|---|
| 作用 | 抛出异常对象 | 声明可能抛出的异常 |
| 位置 | 方法体内 | 方法签名 |
| 数量 | 一次一个 | 可多个 |
| 是否处理 | 否 | 否 |
throw new IOException(); // 抛异常
throws IOException // 声明异常
错!throws 只是“甩锅”
错!没人 catch 照样崩
错,可以多个:
void test() throws IOException, SQLException {}
throws 用于方法声明处,表示该方法可能抛出某种异常但不处理,由调用者负责处理。当方法内部发生异常时,若未捕获,异常会沿着调用栈向上抛出,直到被 catch 或抛至 JVM 导致程序终止。
如果你愿意,我可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。