自定义异常类
在编写程序时可以扩展Exception类定义自己的异常类,然后根据程序的需要来规定哪些方法产生这样的异常。个方法在声明时可使用throws关键宇声明要产生的若干个异常,并在该方法中具体给出产生异常的操作,即用相应的异常类创建对象,并使用throw关键字抛出异常对象,导致该方法结束执行。程序必须在try-catch块语句中调用可能发生异常的方法,其中catch的作用就是捕获throw关键字抛出的异常对象。
注:throw是Java的关键字,改关键字的作用就是抛出异常。throw和throws是两个不同的关键字。
通常情况下,计算两个整数之和的方法不应当有任何异常发生,但是,对某些特殊应用程序,可能不允许同号的整数做求和运算,比如当一个整数代表收入,一个整数代表支出时,这两个整数就不能是同号,下面的例子中,Bank类中有个income(int in,int out)方法,对象调用该方法时,必须向参数in传递正整数,向参数out传递负数,并int+out必须大于等于0,否则该方法就抛出异常。因此,Bank类在声明income(int in,int ou)方法时,使用throws关键字声明要产生的异常。程序运行效果如下所示。
class BankException extends Exception{ String message; public BankException(int m,int n) { message="入账资金"+"m"+"是负数或支出"+n+"是正数,不符合系统要求。"; } public String warnMess() { return message; } } class Bank{ private int money; public void income(int in,int out) throws BankException{ if( in<=0 || out>=0 || in+out<=0 ) throw new BankException(in,out); //方法抛出异常类,导致方法结束 int netIncome=in+out; System.out.printf("本次计算出的纯收入是:%d元\n",netIncome); money=money+netIncome; } public int getMoney() { return money; } } public class Hello { public static void main(String[] args) { Bank bank=new Bank(); try { bank.income(200, -100); bank.income(300, -100); bank.income(400, -100); System.out.printf("银行目前有%d元\n",bank.getMoney()); bank.income(200, 100); bank.income(99999, -100); } catch(BankException e) { System.out.println("计算收益的过程出现如下问题:"); System.out.println(e.warnMess()); } System.out.printf("银行目前有%d元\n",bank.getMoney()); } }本次计算出的纯收入是:100元
本次计算出的纯收入是:200元
本次计算出的纯收入是:300元
银行目前有600元
计算收益的过程出现如下问题:
入账资金m是负数或支出100是正数,不符合系统要求。
银行目前有600元