throws与throw有什么关系?区别是什么?

本质上并没有什么关系,只是throw抛出一个异常对象,throws就得处理而已。

  1. throw表示抛出一个异常类的对象,生成异常类对象的过程;声明在方法体内。
  2. throws:属于异常处理的一种方式,声明在方法的声明处。

简单理解其实就是使用throw抛出一个异常类的对象等待处理,然后throws就是处理方式,只不过它的方式是把这个异常丢出去给别人处理。

eg:

//创建一个ecm(),来计算i / j;可能会有输入数据不符合除法运算的可能性,所以就需要throw一个异常对象,然后ecm()就需要采用throws方式处理这个异常
//此处的EcDef是自定义的异常类,throw了一个EcDef异常对象
    public static int ecm(int i,int j) throws EcDef{//非运行时异常
        if(i < 0 || j < 0){
            throw new EcDef("分子/分母为负数了");
        }
        return i / j;
    }
//main()中对抛出的异常做处理
    public static void main(String[] args) {
        try {
            int i = Integer.parseInt(args[0]);//String类型转换为int
            int j = Integer.parseInt(args[1]);
            int result = ecm(i, j);
            System.out.println(result);
        }catch(NumberFormatException e){
            System.out.println("数据类型不一致");
        }catch(ArrayIndexOutOfBoundsException e){
            System.out.println("缺少命令行参数");
        }catch(ArithmeticException e){
            System.out.println("除0");
        }catch(EcDef e){
            System.out.println(e.getMessage());
        }
//自定义异常类EcDef继承Exception
/*如何自定义异常类?
 * 1.继承现有的异常结构:RuntimeException、Exception
 * 2.提供全局常量:SerialVersionUID
 * 3.提供重载的构造器
 */
public class EcDef extends Exception{//继承Exception类
    static final long serialVersionUID = -7984116164661L;//设置一个全局变量SerialVersionUID
    
    public EcDef(){}
    public EcDef(String msg){//提供重载的构造器
        super(msg);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值