Java基础——八、异常

八、异常

在Java中,异常处理是一个重要的主题,因为它涉及到如何处理程序中的错误和异常情况。在日常工作中,正确地处理异常可以提供程序的健壮性和可维护性。以下是结合日常工作经验对Java异常处理的一些详细叙述:

1.基础概念

(1).分类
  1. 受检异常(Checked Exception) :必须在编译时处理的异常,例如IOException。这些异常通常是由于外部因素引起的,如文件未找到、网络故障等。
  2. 非受检异常(Unchecked Exception):运行时异常和错误(RuntimeExceptionError),例如NullPointerExceptionArrayIndexOutOfBoundsException。这些异常通常是编程错误引起的。
(2).层次结构

所有异常类都是Throwable类的子类。

Throwable 可以用来表示任何可以作为异常抛出的类,分为两种: ErrorException 。其中 Error 用来表示 JVM 无法处理的错误,Exception 分为两种:

2.处理语法

(1).try-catch
java 复制代码
try {
    //可能抛出异常的代码
} catch (SomeException e) {
    // 处理异常的代码
}
(2).try-with-resources
java 复制代码
//try-with-resources 语句
try (Resource res = new Resource()) {
    // 使用资源的代码
} catch (SomeException e) {
    // 处理异常的代码
}
(3).finally

无论是否抛出异常,finall块中的代码都会执行,用于清理资源。

java 复制代码
//try-finally 语句
try {
    // 可能抛出异常的代码
} finally {
    // 无论是否发生异常,都会执行的代码
}

3.常见处理策略

(1).捕获并处理

在方法内捕获异常并处理,例如记录日志或恢复操作

java 复制代码
try {
    // 代码块
} catch (IOException e) {
    log.error("IO Exception occurred", e);
    // 恢复操作
}
(2).向上抛出

方法内不处理异常,而是将异常向上抛给调用者

java 复制代码
public void readFile() throws IOException {
    // 代码块
}
(3).全局异常处理

在应用程序中设置全局异常处理机制,例如使用Spring框架中的@controllerAdvice进行全局控制器异常处理。

java 复制代码
@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handleException(Exception e) {
        return new ResponseEntity<>("An error occurred: " + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

4.工作应用

(1).记录日志

记录详细的异常信息是非常重要的,可以帮助调试和问题定位

java 复制代码
catch (SQLException e) {
    log.error("Database access error", e);
}
(2).自定义异常

创建自定义异常类,以提供更明确的错误信息。

java 复制代码
public class CustomException extends Exception {
    public CustomException(String message){
        super(message);
    }
}
(3).使用断言和验证

在方法开始时进行参数验证,使用IllegalArgumentException或自定义异常。

java 复制代码
public void setAge(int age) {
    if (age < 0) {
        throw new IllegalArgumentException("Age cannot be negative");
    }
    this.age = age;
}
(4).资源管理

确保在异常情况下也能正确释放资源,例如使用try-with-resources

java 复制代码
//try-with-resources 语句
try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
    // 使用资源的代码
} catch (IOException e) {
    log.error("Error reading file", e);
    // 处理异常的代码
}

5.总结

异常处理是Java编程中必不可少的一部分。通过正确的处理异常,可以提高程序的健壮性和可维护性。

在日常工作中,应该养成良好的异常处理习惯,如记录日志、进行参数验证、合理的选择处理策略等。这些实践将帮助你编写出更加稳定和可靠的代码。

相关推荐
陌小呆^O^10 分钟前
Cmakelist.txt之win-c-udp-server
c语言·开发语言·udp
计算机毕设指导615 分钟前
基于 SpringBoot 的作业管理系统【附源码】
java·vue.js·spring boot·后端·mysql·spring·intellij-idea
Gu Gu Study17 分钟前
枚举与lambda表达式,枚举实现单例模式为什么是安全的,lambda表达式与函数式接口的小九九~
java·开发语言
Chris _data19 分钟前
二叉树oj题解析
java·数据结构
牙牙70525 分钟前
Centos7安装Jenkins脚本一键部署
java·servlet·jenkins
时光の尘31 分钟前
C语言菜鸟入门·关键字·float以及double的用法
运维·服务器·c语言·开发语言·stm32·单片机·c
paopaokaka_luck33 分钟前
[371]基于springboot的高校实习管理系统
java·spring boot·后端
以后不吃煲仔饭1 小时前
Java基础夯实——2.7 线程上下文切换
java·开发语言
进阶的架构师1 小时前
2024年Java面试题及答案整理(1000+面试题附答案解析)
java·开发语言
前端拾光者1 小时前
利用D3.js实现数据可视化的简单示例
开发语言·javascript·信息可视化