当前位置: 首页 > article >正文

问:Java异常处理的日常?

一、Java异常的基本分类

Java中的异常主要分为两大类:Checked Exception(检查异常)和Unchecked Exception(非检查异常)。

  • Checked Exception

    • 这些异常在编译时被检查,必须要处理(通过try-catch或者throws关键字)。
    • 示例包括IOExceptionSQLException等。
  • Unchecked Exception

    • 这些异常在编译时不被强制检查,不一定需要处理,通常是由程序逻辑错误引起的。
    • 示例包括NullPointerExceptionArithmeticException等。

二、异常处理机制

Java提供了两种主要的异常处理机制:try-catch-finally和throws声明。

  • try-catch-finally

    • try块用于包含可能抛出异常的代码。
    • catch块用于捕获并处理特定类型的异常。
    • finally块中的代码无论是否抛出异常都会执行,常用于资源释放。
  • throws声明

    • 在方法签名中声明该方法可能抛出的异常,由调用者处理。

三、自定义异常

自定义异常通常是通过继承ExceptionRuntimeException类来实现的。这允许开发者根据具体需求创建特定的异常类型,并用于特定的错误处理场景。

示例

// 自定义检查异常
public class MyCheckedException extends Exception {
    public MyCheckedException(String message) {
        super(message);
    }
}

// 自定义非检查异常
public class MyUncheckedException extends RuntimeException {
    public MyUncheckedException(String message) {
        super(message);
    }
}

// 使用自定义异常
public class CustomExceptionExample {
    public void checkedMethod() throws MyCheckedException {
        throw new MyCheckedException("This is a checked exception.");
    }

    public void uncheckedMethod() {
        throw new MyUncheckedException("This is an unchecked exception.");
    }

    public static void main(String[] args) {
        CustomExceptionExample example = new CustomExceptionExample();
        try {
            example.checkedMethod();
        } catch (MyCheckedException e) {
            System.err.println(e.getMessage());
        }

        try {
            example.uncheckedMethod();
        } catch (MyUncheckedException e) {
            System.err.println(e.getMessage());
        }
    }
}

四、try-with-resources特性

try-with-resources是Java 7引入的一种特殊的try语句,用于自动管理资源(如文件、数据库连接等)。这些资源通常必须显式关闭以释放系统资源,避免资源泄漏。

  • 用途和优势
    • 简洁性:减少了代码量,避免了手动关闭资源的繁琐。
    • 安全性:即使发生异常,资源也会被正确关闭。
    • 可读性:使代码更易于阅读和维护。

示例

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class TryWithResourcesExample {
    public static void main(String[] args) {
        String filePath = "example.txt";
        try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            System.err.println("Error reading file: " + e.getMessage());
        }
        // 此处无需手动关闭BufferedReader,因为try-with-resources会自动处理
    }
}

五、Exception与Error的区别

在Java中,Exception和Error都是Throwable类的子类,但它们在用法和语义上有明显的区别。

  • Error

    • 表示严重的系统错误,通常是JVM的问题。
    • 示例包括OutOfMemoryErrorStackOverflowError
    • 通常不建议捕获和处理。
  • Exception

    • 表示程序可以处理的异常条件。
    • 包括检查异常和非检查异常。
    • 可以由程序本身捕获和处理,以便让程序继续运行。

六、Throw与throws的区别

特性throwthrows
用途在方法内部抛出异常对象在方法签名中声明可能抛出的异常
语法位置方法体内部方法签名(参数列表之后)
异常类型任何Throwable对象(包括ExceptionErrorException(包括其子类,不包括RuntimeException及其子类,除非显式声明)
处理方式需要配合try-catch或继续向上抛出由方法的调用者处理

七、结尾

Java的异常处理机制提供了灵活的方式来处理程序在运行时遇到的各种错误和异常情况。通过合理使用try-catch-finally结构、自定义异常以及理解Exception和Error的区别,我们可以编写更加健壮和可靠的Java程序。


http://www.kler.cn/a/293033.html

相关文章:

  • 【OH】openHarmony开发环境搭建(基于windows子系统WSL)
  • 【图像压缩感知】论文阅读:Self-supervised Scalable Deep Compressed Sensing
  • 【算法】——二分查找合集
  • vue3+element-plus==> el-form输入响应式失效踩坑!!!!!!!!!!
  • 图像处理实验二(Image Understanding and Basic Processing)
  • Python多进程间通讯(包含共享内存方式)
  • 民宿小程序开发制作,开发优势分析
  • 《绝区零》全球累积收入突破1亿美金;《原神》斩获年度最佳手游大奖 | 手游和应用出海资讯
  • Linux 进程概念
  • Java笔试面试题AI答之JDBC(4)
  • 006-Sleuth(Micrometer)+ZipKin分布式链路追踪
  • Swift 运算符
  • 在 “Label Studio” 和 “Android Studio” 中,“studio”的含义
  • Signac R|如何合并多个 Seurat 对象 (2)
  • 联蔚盘云亮相CDIE消费品行业峰会
  • React 全屏问题解决方案
  • 8. GIS数据分析师岗位职责、技术要求和常见面试题
  • 计算polydata相交
  • 【数据结构算法经典题目刨析(c语言)】使用数组实现循环队列(图文详解)
  • Opencv中的直方图(3)直方图比较函数compareHist()的使用
  • 原码、反码、补码及用途
  • 微信小程序开发,使用神卓互联内网穿透做公网地址回调的教程
  • python测试开发基础---线程和进程的概念
  • pytorch初始化张量并填充随机整数值
  • 【Linux详解】命令行参数|环境变量
  • OpenAI SORA团队负责人 通往智能的方式 报告笔记