Java异常随笔

异常文章链接

文章目录

  • 1、Exception和Error的区别
    • (1)Exception:
    • (2)Error:
  • 2、常见的Java异常可以分为以下几类:
  • 3、Java异常的处理机制
  • 4、自定义异常

1、Exception和Error的区别

  • 在Java中,Exception和Error都是Throwable类的子类,表示程序中的异常情况。

它们之间的主要区别在于异常的处理方式和程序的健壮性。

(1)Exception:

是程序中可以被捕获和处理的异常情况。它通常是由程序错误或意外情况引起的,但可以通过编码和逻辑来预防或处理。

  • Exception分为两种类型:
  • 已检查异常(checked exception)

已检查异常是指编译器在编译时强制要求处理的异常,必须通过try-catch块进行捕获或通过throws关键字声明。常见的已检查异常包括IOException、SQLException等。

  • 运行时异常(runtime exception)

运行时异常是指在程序运行时可能出现的异常,通常由编程错误引起,但不要求显式处理。常见的运行时异常包括NullPointerException、ArrayIndexOutOfBoundsException等。

(2)Error:

是指严重的错误和异常情况,通常由系统问题或资源耗尽等无法恢复的情况引起。

  • 与异常不同,错误不应该被捕获和处理,而应该由Java虚拟机(JVM)或操作系统进行处理。常见的错误包括OutOfMemoryError、StackOverflowError等。

2、常见的Java异常可以分为以下几类:

  1. 运行时异常(RuntimeException):

    • ClassCastException:类类型转换异常,当试图将对象强制转换为不是实例的子类时抛出。
    • ArrayIndexOutOfBoundsException:数组下标越界异常,当使用不合法的索引访问数组时抛出。
    • NullPointerException:空指针异常,通过null进行方法和属性调用时抛出。
    • ArithmeticException:算术运算异常,当除数为0时抛出。
    • NumberFormatException:数字转换异常,当试图将一个String转换为指定的数字类型,但字符串不满足数字类型要求的格式时抛出。
    • InputMismatchException:输入不匹配异常,输入的值数据类型与设置的值数据类型不匹配。
  2. 输入输出异常(java.io.IOException):

    • FileNotFoundException:文件找不到异常,通常是因为系统找不到指定的路径或拒绝访问。
    • EOFException:文件已结束异常,在连接断开后继续读取文件时抛出。
  3. 类找不到异常(java.lang.ClassNotFoundException):当通过配置文件查找类时,如果配置路径错误,就会抛出该异常。

  4. SQL异常(java.sql.SQLException):数据库操作相关的异常,包括连接、查询、更新等各种信息的异常。

3、Java异常的处理机制

  1. 捕获异常:
    捕获异常是指在代码中使用try-catch语句块来处理可能发生的异常。try块中包含可能抛出异常的代码,而catch块用于捕获并处理异常。如果try块中的代码抛出异常,那么catch块中的代码将被执行,从而实现对异常的处理。

注意点:

  • try块中可能抛出异常的代码应该被放置在try块内。
  • catch块用于捕获并处理指定类型的异常。
  • 可以使用多个catch块来处理不同类型的异常。
  • catch块中的代码应该根据具体情况进行异常处理,例如打印错误信息、记录日志等。

代码实例:

try {
    // 可能抛出异常的代码
    int result = 10 / 0;
} catch (ArithmeticException e) {
    // 捕获并处理ArithmeticException类型的异常
    System.out.println("除零异常:" + e.getMessage());
}

使用场景:

  • 对于可能产生异常的代码,可以使用try-catch来捕获并处理异常,以避免程序崩溃。
  • 在需要进行资源释放的情况下,可以使用try-catch来确保资源的正确释放。
  • 当需要对不同类型的异常进行不同的处理时,可以使用多个catch块来分别处理不同类型的异常。
  1. 抛出异常:
    抛出异常是指在代码中使用throw语句主动抛出异常。通过throw语句,我们可以自定义异常并将其抛出,从而使得调用者可以捕获并处理该异常。

注意点:

  • throw语句用于抛出指定的异常对象。
  • 可以自定义异常类,并在需要的地方使用throw语句将其抛出。

代码实例:

public void divide(int num1, int num2) throws ArithmeticException {
    if (num2 == 0) {
        throw new ArithmeticException("除零异常");
    }
    int result = num1 / num2;
}

public static void main(String[] args) {
    try {
        divide(10, 0);
    } catch (ArithmeticException e) {
        System.out.println(e.getMessage());
    }
}

使用场景:

  • 当某个方法无法处理某种特定情况时,可以抛出异常并交给调用者处理。
  • 在某些情况下,我们需要自定义异常类来表示特定的错误,这时可以使用throw语句将其抛出。
  • 在代码中使用throw语句可以提供更详细的异常信息,方便调试和排查问题。

4、自定义异常

  • 是指在Java中创建自己的异常类,通过继承现有的异常类(如Exception或RuntimeException)来实现。
  • 自定义异常可以用来表示特定的错误或异常情况,并且可以包含自定义的属性和方法。

使用场景:

  1. 当现有的异常类无法准确描述出现的错误或异常情况时,可以创建自定义异常类来提供更具体的错误信息。
  2. 当需要在程序中处理特定类型的异常时,可以使用自定义异常类来进行捕获和处理。

注意点:

  1. 自定义异常类通常需要继承Java的Exception类或RuntimeException类。如果希望自定义异常类在方法中被强制捕获,则需要继承Exception类;如果希望自定义异常类在方法中可以不进行强制捕获,则需要继承RuntimeException类。
  2. 自定义异常类应该提供合适的构造方法,可以传递错误信息或其他必要参数。
  3. 自定义异常类可以添加额外的属性和方法,以便更好地描述和处理异常情况。

代码实例:

// 自定义异常类
class MyException extends Exception {
    private int errorCode;

    public MyException(String message, int errorCode) {
        super(message);
        this.errorCode = errorCode;
    }

    public int getErrorCode() {
        return errorCode;
    }
}

// 使用自定义异常类的方法
public class CustomExceptionExample {
    public static void main(String[] args) {
        try {
            processInput(10);
        } catch (MyException e) {
            System.out.println("Error code: " + e.getErrorCode());
            System.out.println("Error message: " + e.getMessage());
        }
    }

    public static void processInput(int input) throws MyException {
        if (input < 0) {
            throw new MyException("Invalid input", 1001);
        }
        // 处理其他逻辑
    }
}

你可能感兴趣的:(Java随笔,java,开发语言)