Java 自定义异常
Java 中有一些运行时异常是由Java自己设置的,但是在大多数情况下,程序员需要根据程序的需要自定义异常。在Java中可以通过继承Exception类或者RuntimeException类来自定义异常。
自定义异常类的继承结构:
- Throwable
- Exception
- RuntimeException
- 自定义异常类
示例:
假设有一个银行程序,如果某个账户的余额为负数时,应该抛出异常。首先我们需要自定义一个NegativeBalanceException(余额为负异常)类,它应该继承Exception类。同时,在代码中需要判断账户的余额,如果余额为负数则抛出NegativeBalanceException异常。
class NegativeBalanceException extends Exception {
public NegativeBalanceException() {
super("账户余额为负数");
}
}
public class BankAccount {
private double balance;
public BankAccount(double balance) {
this.balance = balance;
}
public void withdraw(double amount) throws NegativeBalanceException{
if (amount > this.balance) {
throw new NegativeBalanceException();
}
this.balance -= amount;
}
}
在上述代码中,当调用withdraw方法取款时,如果取款额大于余额,就会抛出NegativeBalanceException异常。
throw 和 throws 关键字
在 Java 中,throw 和 throws 关键字用于处理异常。它们的使用方法如下:
throw 语句
throw 语句用于手动抛出异常。它可以使用对象作为参数来抛出异常。在代码中使用 throw 语句时,程序会立即停止执行,并且异常将被抛出。在方法中抛出异常时,它将被传递给方法的调用者,并在调用堆栈中查找所有方法,直到找到可处理它的 try-catch 块。
语法:
throw new Exception();
示例:
假设有一个计算器程序,当除数为零时,应该抛出异常。如果除数为零,我们可以使用 throw 语句手动抛出 ArithmeticException 异常。
public class Calculator {
public int divide(int a, int b) throws ArithmeticException {
if (b == 0) {
throw new ArithmeticException();
}
return a / b;
}
}
在该代码中,如果我们尝试将除数设为零,则会抛出ArithmeticException异常。
throws 关键字
throws 关键字用于声明一个方法可能抛出的异常。它避免了方法内部 try-catch 块,并将异常传递给方法的调用者。
语法:
public void method() throws Exception {
// 方法体
}
示例:
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class FileReadDemo {
public static void main(String[] args) throws FileNotFoundException, IOException{
File file = new File("file.txt");
FileReader fr = new FileReader(file);
char [] a = new char[50];
fr.read(a); // 读取数据到字符数组中
for(char c : a)
System.out.print(c);
fr.close();
}
}
在上述代码中,FileReader构造函数和read方法都声明了可能抛出异常,我们使用 throws 关键字将这些异常传递给调用者来处理。
总结
以上是 Java 自定义异常,throw和throws 关键字的完整攻略,自定义异常可以帮助程序员更好地处理和防止异常错误,而 throw 和 throws 关键字则提供了在异常情况下更好的处理机制来控制程序流程。在实际编程过程中,需要注意什么异常需要声明,什么异常需要抛出等问题。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java自定义异常以及throw和throws关键字用法 - Python技术站