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"); } }