不用加的时候是因为你在方法里面去catch了这个异常,也就是说你的方法里面有try...catch(){},而如果方法里面没有捕获的话就这能抛到方法外去捕获,所以就在方法头上加throws。
Java的异常分为“运行时异常”和“非运行时异常”
举个例子
public void func1() throws Exception{
throw new Exception("XXX");
}
public void func2() {
throw new IllegalArgumentException("XXX");
}
func1抛出的异常是非运行时异常,JAVA编译器强制要求我们必需对出现的这些异常进行catch并处理,否则程序就不能编译通过,所以要加throws
func2抛出的异常是运行异常,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理,编译的时候不加throws也不会报错
当方法里有异常时:
有两种处理方式:
1、抛出异常,交给调用者处理
2、方法里自己将这个异常try catch,捕获异常,并进行异常处理
第一种:抛出异常,交给调用者处理时,就需要在方法头上追加throws 来抛出可能发生的所有异常
而第二种,使用try catch方法,将可能发生异常的代码包裹,进行异常处理,是不用在方法头上抛出异常的
try{
可能出现异常的代码...
}catch(Exception ex){
异常处理...
}finally{
不管是否出现异常,都将会执行,一般用于关闭释放资源..
}