7.3 异常类

来源:互联网 发布:大数据股票龙头股 编辑:程序博客网 时间:2024/06/11 06:11

异常类:程序运行时可能会出现的一些错误,比如试图打开一个根本不存在的文件等,异常处理将会改变程序的控制流程,让程序有机会对错误进行处理

(1)Java用throw关键字抛出Exception子类的实例表示异常发生。

(2)Java允许定义方法的时候声明该方法调用过程中可能出现的异常,即允许方法调用过程中抛出异常对象,终止当前方法的继续执行

//抛出异常NumberFormatException(格式转换异常)IOException(读取文件异常)

//异常对象可以调用以下方法得到或者输出有关异常的信息public String getMessage();public void printStackTrace();public String toString();

7.3.1 try-catch 语句

Java使用try-catch语句来处理异常,将可能出现的异常操作放在try-catch语句的try部分,一旦try部分抛出异常对象,或者调用某个可能抛出异常对象的方法,并且该方法抛出了异常,那么try部分立即结束执行,转向执行catch部分。

//try-catch语句格式try{包含可能发生异常的语句}catch(ExceptionSubClass1 e){···}catch(ExceptionSubClassS2 e){···}

public class Example7_4 {public static void main(String[] args) {// TODO Auto-generated method stubint n=0;int t=1000;try {//m=Integer.parseInt("8888");n=Integer.parseInt("ab89");//t =777;//t没有机会被赋值}catch (NumberFormatException e) {// TODO: handle exceptionSystem.out.println("发生异常:"+e.getMessage());}}}//输出结果:发生异常:For input string: "ab89"


7.3.2 自定义异常类

(1)在编写程序的时候可以扩展Exception类定义自己的异常类,然后根据程序的需求来规定哪些方法产生这样的异常

注意:throw和throws是不同两个关键字


//自定义异常类public class Example7_5_BankException extends Exception {/** * 自定义异常类 * */private static final long serialVersionUID = 446574521862455830L;String message;public Example7_5_BankException(int m, int n) {message = "入账资金" + m + "是负数或者支出" + n + "是正数,不符合系统要求";}public String warnMess() {return message;}}public class Example7_5_Bank {private int money;public void income(int in, int out) throws Example7_5_BankException {if (in <= 0 || out >= 0 || in + out <= 0) {throw new Example7_5_BankException(in, out);// 方法抛出异常,导致方法结束}int netIncome = in + out;System.out.printf("本次计算的纯收入是:%d元\n", netIncome);money = money + netIncome;}public int getMoney() {return money;}}public class Example7_5 {public static void main(String[] args) {// TODO Auto-generated method stubExample7_5_Bank bank = new Example7_5_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(9999, -100);} catch (Example7_5_BankException e) {// TODO: handle exceptionSystem.out.printf("计算收益过程中遇到如下问题:");System.out.printf(e.warnMess());System.out.printf("银行目前有%d元\n", bank.getMoney());}}}/*输出结果:本次计算的纯收入是:100元本次计算的纯收入是:200元本次计算的纯收入是:300元银行目前有600元本次计算的纯收入是:100元本次计算的纯收入是:9899元*/