java笔记7

12.异常

什么是异常

异常是指程序运行过程中发生的不正常情况,它中断了正常的指令流程。

Java异常类结构图

Java异常层次结构基于Throwable类,主要分为两大类:

  • Error:表示编译时和系统错误(如OutOfMemoryError),通常是不可恢复的。
  • Exception:表示程序运行中可以捕获并处理的异常。

Error类与Exception类区别

  • Error:通常是JVM无法处理的严重问题,如StackOverflowError
  • Exception:是程序本身可以处理的异常情况,需要通过try-catch语句捕获并处理。

Exception分类

Exception分为两大类:

  • 运行时异常(RuntimeException):如NullPointerExceptionIndexOutOfBoundsException等,这类异常不强制要求被捕获或声明。
  • 受检查异常(非运行时):如IOExceptionSQLException等,这类异常必须被捕获或在方法签名中通过throws关键字声明。

image-20240806140806260

异常处理机制

抛出异常

使用throw关键字在代码中手动抛出异常。

throw new IllegalArgumentException("参数不合法");

throw与throws用法

  • throw:在代码中直接抛出一个异常。
  • throws:在方法签名中声明该方法可能会抛出的异常类型。
public void myMethod() throws IOException {
    // 方法实现可能抛出IOException
}

捕获异常

使用try-catch语句捕获并处理异常。

try {
    // 尝试执行的代码
} catch (IOException e) {
    // 异常处理代码
}

处理顺序

如果有多个catch块,JVM会按照顺序检查异常类型,直到找到匹配的异常类型进行处理。

异常传播

异常可以在方法调用栈中向上传播,直到被捕获或到达最顶层。

自定义异常

创建自定义异常通常有两种方式:

  1. 继承Exception类创建受检查异常。
  2. 继承RuntimeException类创建运行时异常。
public class MyException extends Exception {
    public MyException(String message) {
        super(message);
    }
}

public class MyRuntimeException extends RuntimeException {
    public MyRuntimeException(String message) {
        super(message);
    }
}

使用自定义异常可以让代码更加清晰和易于维护,同时也方便调用者根据异常类型进行相应的错误处理。

示例代码

public class ExceptionDemo {
    public static void main(String[] args) {
        try {
            methodThatMayThrowException();
        } catch (MyException e) {
            System.out.println("捕获到自定义异常:" + e.getMessage());
        }
    }

    public static void methodThatMayThrowException() throws MyException {
        if (/* 某个条件 */) {
            throw new MyException("发生了一个自定义异常");
        }
        // 其他代码
    }
}

posted @ 2024-08-08 13:59  cj睡不醒  阅读(36)  评论(1)    收藏  举报