【面试题】throws 与 throw 声明和抛出异常
throws是用来声明一个方法可能抛出的所有异常信息,throws是将异常声明但是不处理,而是将异常往上传,谁调用我就交给谁处理
throw是指抛出的一个具体的异常类型
所以throws 是用来声明异常,而 throw 是用来拋出异常!
throws 声明异常
- 方法的定义上使用 throws 表示这个方法可能抛出某种异常
- 需要由方法的调用者进行异常处理
使用 throws 声明抛出异常的思路是,当前方法不知道如何处理这种类型的异常,该异常应该由向上一级的调用者处理;如果 main 方法也不知道如何处理这种类型的异常,也可以使用 throws 声明抛出异常,该异常将交给 JVM 处理。
public class Example {
public static void main(String[] args) {
// TODO Auto-generated method stub
int result = divide(4,2);
System.out.println(result);
}
public static int divide(int x,int y) throws Exception {
int result = x/y;
return result;
}
}
throw 拋出异常
- 表示方法内抛出某种异常对象
- 如果异常对象是非 RuntimeException 则需要在方法申明时加上该异常的抛出 即需要加上 throws 语句 或者 在方法体内 try catch 处理该异常,否则编译报错
- 执行到 throw 语句则后面的语句块不再执行
public void test(int a,int b) throws ArithmeticException{
if(b == 0){
//若b==0,主动抛出异常
throw new ArithmeticException();
}else{
System.out.println(a/b);
}
}
throws 关键字和 throw 关键字在使用上的几点区别如下
- throws 用来声明一个方法可能抛出的所有异常信息,表示出现异常的一种可能性,但并不一定会发生这些异常;throw 则是指拋出的一个具体的异常类型,执行 throw 则一定抛出了某种异常对象。
- 通常在一个方法(类)的声明处通过 throws 声明方法(类)可能拋出的异常信息,而在方法(类)内部通过 throw 声明一个具体的异常信息。
- throws 通常不用显示地捕获异常,可由系统自动将所有捕获的异常信息抛给上级方法; throw 则需要用户自己捕获相关的异常,而后再对其进行相关包装,最后将包装后的异常信息抛出。