美文网首页
201. Java 异常 - 如何抛出异常

201. Java 异常 - 如何抛出异常

作者: Cache技术分享 | 来源:发表于2025-09-27 09:09 被阅读0次

201. Java 异常 - 如何抛出异常

Java 中,抛出异常是一个核心概念。无论是你的代码、第三方包的代码,还是 Java 平台本身,任何地方都可以抛出异常。了解如何使用 throw 语句抛出异常,并理解异常类的继承体系,是编写健壮程序的关键。


🧐 何时抛出异常?

抛出异常是指在程序执行过程中遇到错误时,通过 throw 语句主动抛出一个异常,告知程序出现了无法继续正常执行的问题。

Java 中的异常体系非常丰富,所有异常类都继承自 Throwable 类,Java 为不同类型的异常提供了不同的类,以便程序可以根据异常类型采取适当的处理措施。


🧩 Java 异常体系

Java 平台提供了许多预定义的异常类。所有这些异常类都继承自 Throwable 类。Throwable 有两个主要的子类:

  1. Error:表示严重的错误,通常是系统层面的问题,例如 OutOfMemoryError。这些错误一般不应该被程序捕获和处理。
  2. Exception:表示程序中的各种异常情况。Exception 又分为两类:
    • 检查异常(Checked Exceptions):这些异常在编译时必须被处理,程序员必须捕获或声明抛出。例如,IOExceptionSQLException
    • 非检查异常(Unchecked Exceptions):也叫运行时异常,这些异常通常是由于程序中的逻辑错误引起的。程序员可以选择捕获或忽略它们。例如,NullPointerExceptionArrayIndexOutOfBoundsException

🔨 使用 throw 抛出异常

当你的代码检测到错误或不正常的情况时,你可以使用 throw 语句抛出一个异常。

示例:抛出 IllegalArgumentException

public class Calculator {
    public int divide(int a, int b) {
        if (b == 0) {
            throw new IllegalArgumentException("Division by zero is not allowed!");
        }
        return a / b;
    }
}

在上面的例子中,我们使用 throw 语句抛出了一个 IllegalArgumentException,当除数 b 为零时,我们明确地提示这个错误信息。调用 divide 方法时,如果传入 0 作为除数,就会抛出异常。

如何捕获这个异常:

public class TestCalculator {
    public static void main(String[] args) {
        Calculator calculator = new Calculator();
        try {
            System.out.println(calculator.divide(10, 0));
        } catch (IllegalArgumentException e) {
            System.err.println("Error: " + e.getMessage());
        }
    }
}

在这个例子中,我们捕获了 IllegalArgumentException,并打印出了异常信息。


🛠️ 创建自定义异常类

有时候,Java 自带的异常类不足以表达你的业务逻辑问题。在这种情况下,你可以创建自己的异常类。这对于开发自己的类库或 API非常重要,用户通过这些自定义异常可以明确地区分不同类型的错误。

示例:自定义 InsufficientFundsException

public class InsufficientFundsException extends Exception {
    public InsufficientFundsException(String message) {
        super(message);
    }
}

在上面的例子中,我们创建了一个名为 InsufficientFundsException 的自定义异常类,继承自 Exception。这个异常可以用来表示余额不足的情况。

使用自定义异常:

public class BankAccount {
    private double balance;

    public BankAccount(double balance) {
        this.balance = balance;
    }

    public void withdraw(double amount) throws InsufficientFundsException {
        if (amount > balance) {
            throw new InsufficientFundsException("Insufficient funds for this withdrawal.");
        }
        balance -= amount;
    }
}

在上面的代码中,withdraw 方法如果遇到余额不足的情况,将抛出我们自定义的 InsufficientFundsException


🔗 链式异常(Chained Exceptions)

有时在处理异常时,可能会发生一种情况:一个异常被捕获后,你需要抛出另一个异常。为此,Java 提供了链式异常机制,使你能够将一个异常“包装”成另一个异常,以便将原始的异常信息传递给上层调用者。

示例:链式异常

public class Example {
    public void methodA() {
        try {
            methodB();
        } catch (IOException e) {
            throw new RuntimeException("Runtime exception occurred while handling I/O", e);
        }
    }

    public void methodB() throws IOException {
        throw new IOException("File not found");
    }
}

在上面的例子中,methodA 捕获了 IOException 并将其包装为 RuntimeException,抛给调用者。这里,原始的 IOException 被作为参数传递给新的异常构造函数,形成了一个“链式异常”。


📝 总结

  1. 抛出异常:使用 throw 语句抛出异常,通常用于捕获无法继续执行的错误情况。
  2. 异常类的继承体系:Java 提供了丰富的异常类供我们使用,所有异常类都继承自 Throwable
  3. 自定义异常:你可以创建自己的异常类,帮助你在应用程序中传递特定的错误信息。
  4. 链式异常:链式异常允许你将一个异常“包装”成另一个异常,并保留原始异常的信息。

通过掌握如何抛出异常,学员能够更好地控制错误处理流程,确保程序在遇到问题时能够以合适的方式进行反馈和处理。

相关文章

  • jvm如何处理异常

    异常分类 抛出异常 显示 throw手动抛出y异常 隐示 java虚拟机碰到无法继续执行的异常状态,自动抛出异常 ...

  • 一文读懂 JAVA 异常处理

    JAVA 异常类型结构 Error 和 Exeption 受查异常和非受查异常 异常的抛出与捕获 直接抛出异常 封...

  • 03/13牛客刷题总结

    1.java中的异常处理包括声明异常、抛出异常、捕获异常和处理异常四个环节。 throw用于抛出异常 throws...

  • 用Java实现JVM第十章《异常处理》

    案例介绍异常处理是java语言非常重要的一个语法,本章主要实现如何处理抛出的异常。 在Java语言中,异常可以分为...

  • 用Java实现JVM第十章《异常处理》

    案例介绍 异常处理是java语言非常重要的一个语法,本章主要实现如何处理抛出的异常。 在Java语言中,异常可以分...

  • Java 异常(Java Exception)(三)

    4.2 抛出异常 任何Java代码都可以抛出异常,如:自己编写的代码、来自Java开发环境包中代码,或者Java运...

  • Java 如何抛出异常、自定义异常

    一、异常的抛出 1、定义 : 一个方法不处理这个异常,而是调用层次向上传递,谁调用这个方法,这个异常就由谁来处理。...

  • Java 异常处理——声明、抛出异常

    声明检查类型异常 throws    概述:如果一个方法可能会出现异常,但我们不想使用try..catch 精准...

  • Java- 异常处理

    Java- 异常处理 异常处理能够使一个方法给它的调用者抛出一个异常。 Java异常是派生自 java.lang....

  • JNI基础(10): JNI异常处理

    为了处理以Java代码实现的方法执行中抛出的异常,或者是Native代码中抛出的Java异常,JNI提供了Java...

网友评论

      本文标题:201. Java 异常 - 如何抛出异常

      本文链接:https://www.haomeiwen.com/subject/fqszzjtx.html