Java异常类

throw是Java的关键字,该关键字的作用就是抛出异常;

throw和throws是两个不同的关键字;

throw用来抛出异常;(throw一般在方法里)

throws用来声明抛出异常,如果一个方法不想对自己可能产生的异常进行捕获和处理,则在方法声明时,使用throws子句抛出该异常。;(throws一般在头部)

异常类演示 

public class Test{
   public static void main(String[] args) {
          int n=0,m=0,t=1000;
          try {
              m = Integer.parseInt("8888");    //将输入的文字转为数字的方法
              n = Integer.parseInt("ab89");  //发生异常,转向catch
              t = 7777;  //t没有机会被赋值
          }
          catch(NumberFormatException e){              //NumberFormatException表示数字格式化异常
              System.out.println("发生异常:"+e.getMessage());        //getMessage() 将异常的详细信息输出出来
          }
       System.out.println("n="+n+",m="+m+",t="+t);       //终止了语句的执行,赋值原始数值
          try{
              System.out.println("故意抛出I/O异常");
              throw new java.io.IOException("我是故意的");    //故意抛出异常
              //System.out.println("这个输出语句肯定没有机会执行,必须注释,否则编译出错");
          }
          catch (java.io.IOException e){
              System.out.println("发生异常:"+e.getMessage());
          }
     }
}

自定义异常类

可以扩展Exception类定义自己的异常类,然后规定哪些方法产生这样的异常(即通过throw)。 Exception类有下面几个常用的构造方法:

Exception()

构造详细消息为 null 的新异常。

Exception(String message)

构造带指定详细消息的新异常。

BankExpection.java

public class BankExpection extends Exception {
    String message;

    public BankExpection(int m, int n) {
        message = "入账资金" + m + "是负数或支出" + n + "是正数,不符合系统要求.";
    }

    public String warnMess() {
        return message;
    }
}
Bank.java

public class Bank {
    private int money;

    public void income(int in, int out) throws BankExpection {
        if (in <= 0 || out >= 0 || in + out <= 0) {
            throw new BankExpection(in, out);   //方法抛出异常,导致方法结束
        }
        int netIncome = in + out;
        System.out.printf("本次计算出的纯收入是:%d\n", netIncome);
        money = money + netIncome;
    }

    public int getMoney() {
        return money;
    }
}
public class Test{
   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 (BankExpection e){
              System.out.println("计算收益的过程出现如下问题:");
              System.out.println(e.warnMess());
          }
       System.out.printf("银行目前有%d元\n",bank.getMoney());
     }
}

​​

 

posted @ 2022-05-06 12:51  GK-SZero  阅读(38)  评论(0编辑  收藏  举报