可以通过自定义异常类的子类实现自定义异常类,使得异常更加灵活。
throws关键字,跟在方法后面,声明要抛出的异常类型。
调用声明了throws异常的方法,必须进行异常处理(可以是调用所在的方法再throws),否则不能通过编译。
自定义异常类BankException.java
public class BankException extends Exception {
String message;
public BankException(int m,int n) {//构造方法,给message赋值
super();
message="in:"+m+"out:"+n;
}
public String wareMess() {//BankException.wareMess()返回错误信息
return message;
}
}
抛BankException异常的类Bank.java
public class Bank {
private int money=0;
public void income(int m,int n) throws BankException{
if(m<0||n>0||m+n<0) {
throw new BankException(m,n);//使用throw抛出异常类的对象
}
int netIncome=m+n;
System.out.println("income:"+m+" out"+n+" netIncome:"+netIncome);
money+=netIncome;
}
public int getMoney() {
return money;
}
}
测试类TestCustomException.java
public class TestCustomException {
public static void main(String[] args) {
Bank bank=new Bank();
try {
bank.income(200, -100);
bank.income(300, -200);
bank.income(200, 100);//抛出异常,此处若不处理则不能通过编译,
bank.income(400, -300);//不会被执行,上一句抛出了异常
} catch (BankException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
System.out.println(e.wareMess());
}
System.out.println(bank.getMoney());
}
}