202. Java 异常 - throw 语句的使用
在 Java 中,异常的抛出是通过 throw 语句完成的。任何方法都可以使用 throw 语句来抛出异常。throw 语句需要一个参数,这个参数必须是一个 Throwable 对象。Throwable 对象是 Throwable 类的任何子类的实例。
🧐 throw 语句的基本用法
throw 语句的基本语法非常简单:
java
throw someThrowableObject;
其中 someThrowableObject 是一个继承自 Throwable 类的对象,通常是异常类的实例。
📚 示例:抛出异常
以下是一个常见的栈类中的 pop() 方法示例。该方法从栈中移除并返回栈顶元素,如果栈为空,则抛出 EmptyStackException 异常。
java
import java.util.EmptyStackException;
public class Stack {
private Object[] elements;
private int size;
public Object pop() {
Object obj;
if (size == 0) {
// 如果栈为空,抛出 EmptyStackException 异常
throw new EmptyStackException();
}
obj = elements[size - 1];
elements[size - 1] = null; // 清空栈顶元素
size--; // 减少栈的大小
return obj; // 返回栈顶元素
}
}
在上面的 pop() 方法中,我们首先检查栈是否为空。如果栈为空(即 size == 0),则通过 throw 语句抛出一个新的 EmptyStackException 异常。
解释:
throw new EmptyStackException();:这行代码创建了一个新的EmptyStackException异常对象,并将其抛出。EmptyStackException是一个运行时异常(RuntimeException的子类),所以不需要在方法签名中声明它,也不需要在pop()方法中使用throws关键字。EmptyStackException:这是一个不需要显式声明的运行时异常,因此pop()方法不需要在方法签名中声明throws。对于运行时异常(RuntimeException或其子类),不强制要求进行异常处理或声明。
🛠️ 创建和抛出自定义异常
除了 Java 内置的异常类,你还可以创建自己的异常类,并在合适的地方抛出它们。创建自定义异常时,必须确保它们继承自 Throwable 类,通常继承自 Exception 或 RuntimeException 类。
自定义异常类:
java
public class InvalidAgeException extends RuntimeException {
public InvalidAgeException(String message) {
super(message);
}
}
使用自定义异常:
java
public class Person {
private int age;
public void setAge(int age) {
if (age < 0) {
throw new InvalidAgeException("Age cannot be negative!");
}
this.age = age;
}
}
在上面的代码中,我们创建了一个自定义异常类 InvalidAgeException,它继承自 RuntimeException。当我们调用 setAge() 方法时,如果传入的年龄为负值,我们会抛出这个自定义异常。
📝 总结
throw语句 :throw语句用于抛出异常。它的作用是传递一个异常对象,这个对象必须是Throwable类或其子类的实例。- 运行时异常 :对于运行时异常(例如
EmptyStackException),方法不需要声明throws,因为这些异常是非检查异常(unchecked exceptions)。 - 自定义异常 :你可以创建自己的异常类,继承自
Exception或RuntimeException,然后在代码中抛出它们。 - 抛出异常的目的:通过抛出异常,程序能够在遇到无法继续执行的错误时进行适当的处理或传递错误信息。