Exection throws和throw

抛出异常 throw

假如在我们编写一个有参方法的时候,我们需要考虑到当调用者调用的时候,会传一些非法参数进来,我们需要对传入参数进行一个合法性判断,如果传入参数是非法的,我们就应该告诉调用者,必须传入一个合法的参数,这时候我们需要使用抛出异常的方式来告诉调用者。

比如以下代码

    public Integer devision(Integer i){
        int j=1/i;
        return j;
    }

当调用者传入的参数为0的时候,那么JVM肯定会抛出算数异常,Exception in thread "main" java.lang.ArithmeticException: / by zero
所以我们要让调用者不能传非法参数进来。


那么我们可以通过下面的方法来解决

我们来看JDKAPI ArithmeticException的这个构造方法
这里写图片描述

  1. 创建一个异常对象。封装一些提示信息(信息可以自己编写)。
  2. 需要将这个异常对象告知给调用者。怎么告知呢?怎么将这个异常对象传递到调用者处呢?通过关键字throw就可以完成。throw 异常对象;

我们通过下面这段代码演示

   public static Integer devision(Integer i){
        if(i==0){
            throw new ArithmeticException("除数不能为0");
        }
        int j=1/i;
        return j;
    }

声明异常throws

这个关键字的作用是告诉调用者,如果方法内通过throw抛出了异常,调用者你必须去处理
这个关键字必须写在方法上,声明异常格式

修饰符 返回值类型 方法名(参数) throws 异常类名1,异常类名2… {   }

我们通过下面这段代码演示

 public static Integer devision(Integer i)throws Exception{
        if(i==0){
            throw new ArithmeticException("除数不能为0");
        }
        int j=1/i;
        return j;
    }

这就告诉了调用者,我这里可能会出现异常,你必须去处理

但是如果抛出的异常是,不是继承RuntimeExection类的话,那么就不强制调用者去处理,如果不是继承RuntimeExection那么就强制调用者去处理

官方API解释

这里写图片描述


运行时期异常的特点:
- 方法中抛出运行时期异常,方法定义中无需throws声明,调用者也无需处理此异常
- 运行时期异常一旦发生,需要程序人员修改源代码.

原文地址:https://www.cnblogs.com/aotemanzhifu/p/9192429.html