Java异常处理
What?什么是异常
- 在 Java 中,异常(Exception)是一种程序运行过程中发生的、用来指示错误或其他意外情况的机制。它允许程序在发生错误时不中断整个流程,而是通过“抛出(throw)”和“捕获(catch)”异常的方式来进行处理,从而提高程序的健壮性和可维护性。
Why?为什么有异常
- 为了让程序更健壮,避免在运行中因为一个错误就崩溃退出
When?什么时候会有异常
- 异常在程序运行时发生
Where?在哪里会出现异常
Throwable
├── Error // 严重错误,程序无法处理,如内存溢出
└── Exception // 异常,程序可以捕获和处理
├── Checked Exception // 受检异常,必须显式处理(如IOException)
└── Unchecked Exception // 非受检异常,可选择处理(如NullPointerException)
-
Checked Exception:在编译之前就必须显式处理
-
Unchecked Exception:在运行时可能会出现的问题
Who?谁处理异常
- 方法自己处理:用
try catch捕获异常,自己定义处理方法 - 抛给调用方处理,在方法内
throw或者在方法声明处throws,调用方可以通过try catch捕获调用该方法中的异常,并自定义处理方法,如果向上层抛到main方法都没被捕获处理的话,那程序将直接崩溃
How?如何处理异常
- try () catch () finally()
try-catch 块用于捕获并处理在程序运行过程中发生的异常,以防程序崩溃。
public class Test {
public static void main(String[] args) {
try {
int a = 10;
int b = 0;
int c = a / b; // 会抛出 ArithmeticException
System.out.println("结果:" + c);
} catch (ArithmeticException e) {
System.out.println("发生异常:除数不能为0!");
} finally {
System.out.println("finally 块:清理资源");
}
}
}
- throw
throw是代码中用于抛出特定的异常,可以被上层调用者try catch捕获;
public class Test {
public static void main(String[] args) {
int age = -5;
if (age < 0) {
throw new IllegalArgumentException("年龄不能为负数!");
}
}
}
- throws
throws是在方法处声明可能抛出的异常,注意checked Exception一定要声明(或在方法内部用 try-catch 处理)
public void readFile(String path) throws IOException {
FileReader reader = new FileReader(path);
}