Java异常处理

50 阅读2分钟

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);
}