JAVA 中的异常(3)- 异常的处理方式二:throw/throws
1. throw 用法
throw 是用于抛出异常,将这个异常对象传递到调用者处,并结束当前方法的执行
public static void main(String[] args) {
try {
int i = 10 / 0;
System.out.println("i = " + i);
}catch(ArithmeticException e) {
// 抛出异常,传递自定义异常信息提示
// 默认抛出给 JVM 处理打印异常详细信息
throw new ArithmeticException("除数不能为0");
}
}
throws抛出异常的规则:
-
1)如果是不可查异常(unchecked exception),即Error、RuntimeException或它们的子类,那么可以不使用throws关键字来声明要抛出的异常,编译仍能顺利通过,但在运行时会被系统抛出。
-
2)必须声明方法可抛出的任何可查异常(checked exception)。即如果一个方法可能出现受可查异常,要么用try-catch语句捕获,要么用throws子句声明将它抛出,否则会导致编译错误
-
3)仅当抛出了异常,该方法的调用者才必须处理或者重新抛出该异常。当方法的调用者无力处理该异常的时候,应该继续抛出,而不是囫囵吞枣。
-
4)调用方法必须遵循任何可查异常的处理和声明规则。若覆盖一个方法,则不能声明与覆盖方法不同的异常。声明的任何异常必须是被覆盖方法所声明异常的同类或子类。
2. throws 用法
throws运用于方法声明之上,用于表示当前方法不处理异常,而是提醒该方法的调用者来处理异常(抛出异常)。
public class ExceptionDemo {
public static void main(String[] args) {
demo();
}
public static void demo() throws ArrayIndexOutOfBoundsException{
try {
int[] arr = {1,2,3};
int i = arr[3];
System.out.println("i = " + i);
}catch(ArrayIndexOutOfBoundsException e) {
System.out.println(e.toString());
}
}
}
throws子句放在方法参数列表的右括号之后,一个方法可以声明抛出多个异常,多个异常之间用逗号隔开
public class Main {
public static void readChar() throws IOException,RemoteException {
int input = System.in.read();
}
}
3. 关键字throw和throws的区别
throw:用在方法内,后面跟异常对象,用于抛出异常对象,相当于new一个异常对象。在方法内 出现某种情况,使程序不能继续运行,需要进行跳转时,用throw把异常对象抛出
throws:用在方法上,后面跟异常的类名,用于声明异常,标识方法会暴露出的异常。在定义方法时,需要把会出现的问题暴露出来让调用者去处理,就用throws在方法上标识出来。
4. 选择用try-catch-finally还是throw/throws
如果父类中被重写的方法没有throws方式处理异常,则子类重写的方法也不能使用throws,意味着如果子类重写的方法中有异常,必须使用try-catch-finally方式处理。
执行的方法a中,先后又调用了另外的几个方法,这几个方法是递进关系执行的。我们建议这几个方法使用throws的方式进行处理。而执行的方法a可以考虑使用try-catch-finally方式进行处理。
作者:快乐随行
https://www.cnblogs.com/jddreams/p/14281935.html