Java异常往上抛 - throws抛出异常
阅读:312目录介绍
- 01.throws的用法介绍
- 02.throw的用法介绍
- 03.throws和throw区别
- 04.Throws抛出异常的规则
01.throws的用法介绍
- throws的具体使用规则
- 用在方法声明后面,跟的是异常类名
- 可以跟多个异常类名,用逗号隔开
- 表示抛出异常,由该方法的调用者来处理
- throws表示出现异常的一种可能性,并不一定会发生这些异常
static void pop() throws NegativeArraySizeException { // 定义方法并抛出NegativeArraySizeException异常 int[] arr = new int[-3]; // 创建数组 } public static void main(String[] args) { // 主方法 try { // try语句处理异常信息 pop(); // 调用pop()方法 } catch (NegativeArraySizeException e) { System.out.println("pop()方法抛出的异常");// 输出异常信息 } } 使用throws关键字将异常抛给调用者后,如果调用者不想处理该异常,可以继续向上抛出,但最终要有能够处理该异常的调用者。 pop方法没有处理异常NegativeArraySizeException,而是由main函数来处理。
02.throw的用法介绍
- throw的一般形式如下所示
throw ThrowableInstance
- ThrowableInstance必须是Throwable或其子类类型的对象。throw语句之后的执行流程会立即停止,所有的后续语句都不会执行,然后按顺序依次检查所有的catch语句,检查是否和异常类型相匹配。如果没有找到匹配的catch语句,那么默认的异常处理程序会终止程序并输出堆栈踪迹。
- 例如,运行以下代码,将得到输出结果:“NullPointerException”
public class Demo { public static void demo(){ throw new NullPointerException("NullPointer"); } public static void main(String[] args) { try{ demo(); }catch (NullPointerException e) { System.out.println("NullPointerException"); } } }
- 但如果catch子句的异常与throw抛出的异常类型不匹配时,异常将由Java默认的异常处理程序来处理。例如,运行以下代码:
public class Demo { public static void demo(){ throw new NullPointerException("NullPointer"); } public static void main(String[] args) { try{ demo(); }catch (ArrayIndexOutOfBoundsException e) { System.out.println("ArrayIndexOutOfBoundsException"); } } }
- 运行结果是:
Exception in thread "main" java.lang.NullPointerException: NullPointer at Demo.demo(Demo.java:4) at Demo.main(Demo.java:9)
- throw的具体使用方法
- 用在方法体内,跟的是异常对象名
- 只能抛出一个异常对象名
- 表示抛出异常,由方法体内的语句处理
public PlayService getPlayService() { PlayService playService = BaseAppHelper.get().getPlayService(); if (playService == null) { //待解决:当长期处于后台,如何保活?避免service被杀死…… throw new NullPointerException("play service is null"); } return playService; }
03.throws和throw区别
- throw的概述以及和throws的区别
- throws的方式处理异常: 定义功能方法时,需要把出现的问题暴露出来让调用者去处理。那么就通过throws在方法上标识。
- throw的概述: 在功能方法内部出现某种情况,程序不能继续运行,需要进行跳转时,就用throw把异常对象抛出。
04.Throws抛出异常的规则
- Throws抛出异常的规则如下所示:
- 如果是不可查异常(unchecked exception),即Error、RuntimeException或它们的子类,那么可以不使用throws关键字来声明要抛出的异常,编译仍能顺利通过,但在运行时会被系统抛出。
- 2)必须声明方法可抛出的任何可查异常(checked exception)。即如果一个方法可能出现受可查异常,要么用try-catch语句捕获,要么用throws子句声明将它抛出,否则会导致编译错误
- 3)仅当抛出了异常,该方法的调用者才必须处理或者重新抛出该异常。当方法的调用者无力处理该异常的时候,应该继续抛出,而不是囫囵吞枣。
- 4)调用方法必须遵循任何可查异常的处理和声明规则。若覆盖一个方法,则不能声明与覆盖方法不同的异常。声明的任何异常必须是被覆盖方法所声明异常的同类或子类。
赞赏支持
