工作记录----工作中各个方法处理检查型异常的常见处理方案----小白也能看懂--12.13

2023-12-13 22:26:55

当谈论Java中的异常和错误时,有一些核心概念值得了解:

  1. 异常(Exceptions)

    • 异常指的是程序在运行时遇到的问题,可能会导致程序的异常行为或中断程序的正常流程。
    • Java中的异常分为两类:可检查异常(Checked Exceptions)和不可检查异常(Unchecked Exceptions)。
    • 可检查异常是在编译时强制处理的异常,通常需要使用 try-catch 块或在方法上使用 throws 关键字进行处理,如 IOException
    • 不可检查异常是运行时出现的异常,通常继承自 RuntimeException,例如 NullPointerExceptionArrayIndexOutOfBoundsException 等。
  2. 错误(Errors)

    • 错误指的是Java虚拟机(JVM)无法处理的严重问题,通常导致程序无法继续运行。
    • 错误是指导致应用程序中断或失败的问题,而不是应用程序代码错误导致的异常。
    • 例如 OutOfMemoryError 表示内存不足,StackOverflowError 表示堆栈溢出等。
  3. 异常处理(Exception Handling)

    • 使用 try-catch-finally 语句块可以捕获和处理异常。
    • try 代码块中包含可能会引发异常的代码,catch 用于捕获和处理异常,finally 用于执行无论异常是否发生都需要执行的代码块。
    • 可以使用多个 catch 块捕获不同类型的异常,确保适当地处理异常情况。
  4. 异常层级结构(Exception Hierarchy)

    • Java中的异常以层级结构组织,Throwable 是所有异常和错误的根类。
    • Throwable 分为 ErrorException 两个子类,Exception 又分为 RuntimeException 和其他受检查异常。
    • 异常类之间有继承关系,这使得可以通过多态性处理异常。
  5. 异常处理最佳实践

    • 对于可检查异常,考虑使用 try-catchthrows 在合适的地方处理异常。
    • 对于不可检查异常,通常是由程序错误导致的,应该修复代码来避免这些错误的发生。

当处理异常时,可以使用 try-catch 语句来捕获和处理异常,下面是一个简单的示例:

public class ExceptionHandlingExample {

    public static void main(String[] args) {
        try {
            // 可能抛出异常的代码块
            int result = divide(10, 0);
            System.out.println("Result: " + result); // 这行代码不会被执行
        } catch (ArithmeticException e) {
            // 捕获并处理异常
            System.out.println("Error: Division by zero");
            e.printStackTrace(); // 打印异常信息
        } finally {
            // finally块中的代码无论异常是否发生都会执行
            System.out.println("Finally block");
        }
    }

    // 一个简单的除法方法,可能抛出ArithmeticException
    private static int divide(int a, int b) {
        return a / b;
    }
}

e.printStackTrace();啥意思?
e.printStackTrace() 是一个 Java 中常用的方法,它用于在控制台打印异常信息。在捕获到异常后,使用 printStackTrace() 可以将异常的详细信息打印出来,包括异常类型、出错的代码行数、方法调用链等,有助于排查问题和定位错误。

这个方法通常在异常处理块中使用,以便开发者能够更好地了解出现异常的原因及其位置。

各个方法处理检查型异常的常见处理方案

  1. 捕获并处理异常: 使用 try-catch 块捕获异常并处理它。例如:
try {
    // 可能会抛出异常的代码
    FileReader file = new FileReader("example.txt");
    // 读取文件内容等操作
} catch (FileNotFoundException e) {
    // 处理文件未找到异常
    e.printStackTrace();
}
  1. 向上抛出异常: 在方法签名中声明方法可能抛出的异常,并将它传播到调用该方法的地方。例如:
public void readFile() throws FileNotFoundException {
    FileReader file = new FileReader("example.txt");
    // 读取文件内容等操作
}
  1. 使用 finally 块: 无论是否发生异常,finally 块中的代码都会执行。通常用于释放资源或执行必要的清理工作。例如:
FileReader file = null;
try {
    file = new FileReader("example.txt");
    // 读取文件内容等操作
} catch (FileNotFoundException e) {
    e.printStackTrace();
} finally {
    if (file != null) {
        try {
            file.close(); // 关闭文件流
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

try-catch -finally 那个关键字可以省略?

在处理异常时,finally 块是可选的。你可以使用 try-catch 块来捕获异常,并选择性地在必要时使用 finally 块来执行清理或资源释放操作。如果没有需要在异常发生或捕获后执行的特定代码,可以省略 finally 块。

try {
    FileReader file = new FileReader("example.txt");
    // 读取文件内容等操作
} catch (FileNotFoundException e) {
    e.printStackTrace();
}
// 其他代码

在这种情况下,如果异常被捕获并处理了,程序会继续执行 catch 块后面的代码或者直接跳到后续代码执行,不会执行 finally 块内的内容

文章来源:https://blog.csdn.net/qq_51711443/article/details/134973980
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。