欢迎光临
我们一直在努力

Java 第七章 异常处理

一、为什么需要异常处理?

在程序运行中,硬件故障、用户输入错误、软件bug等都会导致程序崩溃。异常处理的核心价值是:

– 让错误处理和正常业务逻辑分离,代码更清晰易维护

– 防止程序直接崩溃,能给出友好提示或体面退出

– 集中处理错误,避免传统编程中大量的 if-else 错误判断导致逻辑混乱

二、异常的基础概念

1. 什么是异常?

异常(Exception)是程序运行中发生的非正常事件,比如:

– 文件不存在( FileNotFoundException )

– 数组下标越界( ArrayIndexOutOfBoundsException )

– 空指针访问( NullPointerException )

– 类型转换错误( ClassCastException )

2. Java异常类的层次结构

所有异常都继承自 Throwable ,它有两个核心分支:

类名 特点 示例 

Error  系统级错误,程序无法处理,如JVM崩溃、硬件故障 VirtualMachineError 、 ThreadDeath  

 Exception  程序级错误,可通过代码处理 分为RuntimeException和CheckedException 

RuntimeException  运行时异常,编译器不强制处理,多为逻辑错误  NullPointerException 、 ArrayIndexOutOfBoundsException  

CheckedException 编译时异常,编译器强制要求捕获或声明抛出  IOException 、 FileNotFoundException  

三、Java的异常处理机制

Java提供了两种核心处理方式:捕获异常 和 声明抛出异常

1. 捕获异常: try-catch-finally 

语法结构

try {

    // 可能抛出异常的代码

} catch (异常类型1 e) {

    // 处理异常类型1

} catch (异常类型2 e) {

    // 处理异常类型2

} finally {

    // 无论是否发生异常,都会执行的代码(如资源关闭)

}

关键要点

–  try :标记可能出错的代码块

–  catch :捕获并处理对应类型的异常,必须先捕获子类异常,再捕获父类异常(否则会出现 Unreachable catch block 错误)

–  finally :主要用于释放资源(如文件流、数据库连接),确保资源一定被回收

2. 声明抛出异常: throws 

如果方法无法处理异常,可以在方法声明中用 throws 声明抛出异常,交给调用者处理。

public static void main(String[] args) throws IOException {

    FileInputStream fis = new FileInputStream("test.txt");

    // …

}

– 一个方法可以声明抛出多个异常,用逗号分隔

–  main 方法声明的异常会直接交给JVM处理,程序会终止

3. 主动抛出异常: throw 

程序中可以手动创建并抛出异常对象,用于处理自定义错误场景:

if (numBoxes < 0) {

    throw new NegativeNumberException(); // 抛出自定义异常

}

四、自定义异常类

当Java内置的异常无法满足业务需求时,可以自定义异常类,步骤如下:

 

1. 继承 Exception (或其子类,如 RuntimeException )

2. 编写构造方法(至少包含无参和带String参数的构造)

教材示例:自定义负数异常

class NegativeNumberException extends Exception {

    public NegativeNumberException() {

        super();

    }

    public NegativeNumberException(String message) {

        super(message);

    }

}

使用时通过 throw new NegativeNumberException() 抛出,再用 catch 捕获处理。

五、核心对比:传统错误处理 vs 异常处理

对比维度 传统编程技术 异常处理技术 

代码结构 大量嵌套 if-else ,业务逻辑和错误处理混在一起 正常逻辑和错误处理分离,代码更清晰 

维护性 错误处理代码分散,难以修改和扩展 集中处理异常,新增错误类型只需添加 catch 块 

可读性 正常业务逻辑被错误判断打断,难以阅读 核心业务逻辑连贯,错误处理集中在 catch 块 

六、关键工具:日志类  java.util.logging.Logger 

Java自带的日志系统的核心用法:

1. 获取 Logger 实例: Logger logger = Logger.getLogger("包名.类名"); 

2. 配置日志处理器: FileHandler 将日志写入文件, SimpleFormatter 格式化日志

3. 记录不同级别的日志:

–  logger.severe() :严重错误

–  logger.warning() :警告信息

–  logger.info() :普通信息

4. 日志级别优先级: SEVERE > WARNING > INFO > CONFIG > FINE > FINER > FINEST ,设置级别后,高于等于该级别的日志才会输出

 

赞(0)
未经允许不得转载:171主机测评 » Java 第七章 异常处理
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址