抛出关键字throw、throws说明
try catch在平时见的多,不过抛出throw,throws这两个关键字,对新手来说可能就使用的少一些了。总的来说,throw作用于对象,throws作用于方法。
throw
throw 是抛出一个异常实例,或者说是抛出一个异常对象。例如:
throw new Exception();
throws
throws 是用来声明方法可能有异常抛出的。例如:
public void method() throws Exception {
throw new Exception();
}
在调用声明异常的方法时,就需要自己去捕获异常,或者也使用throws关键字给自己的方法声明可能抛出异常。
异常抛出、捕获的几条规则
- 异常只有被抛出才会被捕获,进而才会执行catch中的代码。
- 被抛出的异常是由底层方法向上层方法传递的,并且只会被catch住一次,如果被catch则不再向上层方法传播。
- 如果异常抛出后,没有被catch,会导致程序的异常终止。
- catch所能捕获的异常类型只能是定义时声明的异常类型和该异常类型的子类。如果同时定义了多个catch块,则顺序检查每个catch块,如果被捕获,则不再向下传播。
try {
throw new Exception();
} catch (Exception e) { //只有Exception类型和它的子类才会被这个catch块捕获
e.printStackTrace();
}
- 并不是所有异常都需要在方法中声明或被捕获。可检查异常(checked exception)是必须给方法声明throws或者try catch的异常,这类异常是指在程序运行前就预知的可能错误。与之对应,运行时异常(runtime exception)是可以不用给方法声明throws或者try catch的异常,这类异常在运行时发生,默认发生后也没有很好的解决办法,可以不被声明。