我们将异常基础:异常捕获及自定义异常(2)里的Person类的setAge()方法改一下,让该方法将异常抛出throws,而不catch。
public void setAge(int age)throws AgeException {
if(age<=0 || age>=110){
throw new AgeException(age);
}else{
this.age = age;
}
}
public class ExceptionTest {
public static void main(String[] args) {
Person p = new Person();
Person p1 = new Person();
try {
p1.setAge(120);
} catch (Exception e) {
System.out.println(e.toString());
}
try {
p.setAge(60);
System.out.println("正确年龄:"+p.getAge());
} catch (AgeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
在调用该方法时,调用者所载方法需要将该异常处理,或继续向上throws,像这样将异常一层层抛出,由最后一层处理该异常,或最后抛给main方法,有JVM处理,使异常形成一个链,叫做异常链。
补充:throw与throws的区别?
答:
1、throws出现在方法函数头;而throw出现在函数体。
2、throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异 常,执行throw则一定抛出了某种异常。
3、两者都是消极处理异常的方式(这里的消极并不是说这种方式不好),只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用处理。最好使用try{}catch(){}将异常处理。
注意:
如果一个方法可能出现受可查异常,要么用try-catch语句捕获,要么用throws子句声明将它抛出,否则会导致编译错误
当抛出了异常,该方法的调用者才须处理或者重新抛出该异常。当方法的调用者无力处理该异常的时候,应该继续抛出,而不是随便catch该异常。