throw关键字与Objects非空判断_requireNonNull方法

throw关键字

异常的处理


Java异常处理的五个关键字:try.catch、finally.throw、throws


抛出异常throw

在编写程序时,我们必须要考虑程序出现问题的情况。比如,在定义方法时,方法需要接受参数。那么,当调用方法使用接受到的参数时,首先需要先对参数数据进行合法的判断,数据若不合法,就应该告诉调用者,传递合法的数据进来。这时需要使用抛出异常的方式来告诉调用者。

在java中,提供了一个throw关键字,它用来抛出一个指定的异常对象。那么,抛出一个异常具体如何操作呢?

  1.创建一个异常对象。封装一些提示信息(信息可以自己编写)。

  2.需要将这个异常对象告知给调用者。怎么告知呢﹖怎么将这个异常对象传递到调用者处呢?通过关键字throw就可以完成。throw异常对象。
throw用在方法内,用来抛出一个异常对象,将这个异常对象传递到调用者处,并结束当前方法的执行。

 

package Demo_Exception;
/*
throw关键字
作用:
    可以使用throw关键字在指定的方法中抛出指定的异常
  使用格式:
    throw new XXXException(“异常产生的原因");
  注意:
    1.throw关键字必须写在方法的内部
    2.throw关键字后边new的对象必须是Exception或者Exception的子类对象
    3.throw关键字抛出指定的异常对象,我们就必须处理这个异常对象
        throw关键字后边创建的是RuntimeException或者是RuntimeException的子类对象,我们可以不处理;默认交给Jw处理(打印异常对象,中断程序)
        throw关键字后边创建的是编译异常(写代码的时候报错),我们就必须处理这个异常,要么throws,要么try. ..catch
 */
public class Demo01_Throw {
    public static void main(String[] args) {
//        int[] arr = null;
        int[] arr =new int[3];
        int e = getElement(arr, 3);
        System.out.println(e);

    }
      /*+
        定义一个方法,获取数组指定索引处的元素参数:
        int[ ] arr
        int index
        以后(工作中)我们首先必须对方法传递过来的参数进行合法性校验
        如果参数不合法,那么我们就必须使用抛出异常的方式,告知方法的调用者,传递的参数有问题
        注意:
            NulLPointerException是一个运行期异常,我们不用处理,黑t认交给JVI处理
         */

    public static int getElement(int[] arr, int index) {
        /*
        我们可以对传递过来的参数数组,进行合法性校验
        如果数组arr的值是null
        那么我们就抛出空指针异常,告知方法的调用者"传递的数组的值是null”
         */
        if (arr == null) {
            throw new NullPointerException("传递的数组的值是null");
            /*
            我们可以对传递过来的参数index进行合法性校验如果index的范围不在数组的索引范围内
            那么我们就抛出数组索引越界异常,告知方法的调用者“传递的索引超出了数组的使用范围”
             */
            if (index < 0 || index > arr.length - 1) {
                throw new ArrayIndexOutOfBoundsException("传递的索引超出了数组的使用范围");
            }
            int ele = arr[index];
            return ele;
        }

    }
}

Objects非空判断
还记得我们学习过一个类Objects吗,曾经提到过它由一些静态的实用方法组成,这些方法是null-save(空指针安全的)或null-tolerant(容忍空指针的),那么在它的源码中,对对象为null的值进行了抛出异常操作。
public static <T> T requireNonNull(T obj):查看指定引用对象不是null。

package Demo_Exception;

import java.util.Objects;

/*
Obects类中的静态方法
public static <T> T requireNonNuLL(T obj):查看指定引用对象不是nulL。
    源码:
    public static <T> T requireNonNull( T obj) {
        if (obj -= nulL)
        throw new NulLPointerException( ) ;
        return obj;
}
 */
public class Demo03_Objects {
    public static void main(String[] args) {
        method(null);
    }
    public static  void  method(Object obj){
        //对传递过来的参数进行合法性判断,判断是否为null
       /*
        if (obj==null){
            throw new NullPointerException("传递的对象的值是null");
        }
        */
        //Objects.requireNonNull(obj);
        Objects.requireNonNull(obj,"传递的对象的值是null");

    }

}

 

posted @ 2022-07-07 13:44  zj勇敢飞,xx永相随  阅读(40)  评论(0编辑  收藏  举报