try-catch异常抛出与捕获

本文详细介绍了Java中的异常处理机制,包括try-catch-finally结构和throws-throw结构的使用,以及如何自定义异常。通过具体的代码示例,展示了在遇到可能引发错误的操作时如何进行异常捕获和处理,以及如何在方法中声明和抛出自定义异常。
摘要由CSDN通过智能技术生成
  1. 什么时候要考虑异常?
    所谓异常就是程序运行时可能出现的一些错误,比如试图打开一个根本不存在的文件,或者除法运算时除数为0,再或者根据实际的业务来判断是否会出现异常。
    在这里插入图片描述
    这里是java的异常类的继承关系树:
    在这里插入图片描述

  2. try-catch-finally结构

  try
   {
      //包含可能发生异常的语句
      call methodA() and maybe throw an exception;
      call methodB() and maybe throw an exception;
      call methodC() and maybe throw an exception;
      everything is OKay, so display finalresult;
   }catch(methodA()'s Exception/Error e)
   //这里的“methodA()'s Exception/Error”指的是异常的类名,e为这个类的对象
   {
      set error code to methodA();
   }
   …………//表示methodB()和methodC()的异常处理方法与methodA()大致类似
    finally
    {
      //执行必须要做的操作,既是否发生异常都会执行的步骤。
    }

在这里插入图片描述

  1. throws-throw结构
    在这里插入图片描述
    举个例子:
//在自己编写的方法中主动抛出异常
// 方法本身不对异常捕获和处理,而由调用它的方法去处理
class MyMath{
    public int div (int i, int j)  throws Exception {   //或ArithmeticException
        return (i / j) ;
    }
}
//主类
public class test_vector{
    public static void main(String args[]){
        MyMath m = new MyMath() ;
        try{
            int temp = m.div(10, 0) ;
            System.out.println(temp) ;
        }catch (Exception e){
            System.out.println("捕获 除数为零异常") ;
            //e.printStackTrace(); // 打印异常
        }
        //throw new Exception("抛着玩的。") ;	// 人为抛出
    }
}

在这里插入图片描述
通过这条语句可以将异常所在打印出来,比如
在这里插入图片描述

再或者可以将代码修改成这样:

//在自己编写的方法中主动抛出异常
// 方法本身不对异常捕获和处理,而由调用它的方法去处理
//import java.lang.Exception;
class MyMath{
    public int div (int i, int j)  throws Exception {   //或ArithmeticException
        return (i / j) ;
    }
}
//主类
public class test_vector{
    public static void main(String args[])throws Exception{
        MyMath m = new MyMath() ;
        try{
            int temp = m.div(10, 0) ;
            System.out.println(temp) ;
        }catch (Exception e){
            System.out.println("捕获 除数为零异常") ;
            e.printStackTrace(); // 打印异常
        }
        throw new Exception("抛着玩的。") ;	// 人为抛出
    }
}


这里与前者的不同就是在主类后面加入了一个throws Exception表明通过程序员自己抛出异常。

  1. 用户自己自定义异常
    由于JDK手册中的异常种类可能会不满足程序员的需要,但是重新写完一个异常类是在复杂,所以我们可以运用JAVA的特性——完全面向对象,用“继承”的方法来自定义异常类 。
    一个方法在声明时可以使用throws关键词声明要产生的若干个异常,并在该方法的方法体中给出产生异常的操作,即用相应的异常类创建对象,并使用thorw关键词抛出该异常对象,导致该方法结束执行。
    程序必须在try-catch块语句中调用可能发生异常的方法,其中catch的作用就是捕获throw关键字抛出的异常对象。
    一个例子:
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 test_vector
{
    public static void main(String args[]) throws BankException
    {
        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(9999,-100);
        }catch (BankException e)
        {
            System.out.println("计算收益出现以下问题:");
            System.out.println(e.warnMess());
        }
        System.out.printf("银行目前有%d元\n",bank.getMoney());
    }
}

在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值