当我们调用一个含有throws声明异常抛出的方法时,编译器要求我们必须处理这个异常,否则编译不通过,处理的方式有两种:
1)使用try-catch捕获异常并处理
2)在当前方法上继续使用throws声明异常的抛出
具体使用哪种取决于异常处理的责任问题,但永远不应当在main方法上写throws代码演示
使用当前类测试异常的抛出
package exception;
/**
* 使用当前类测试异常的抛出
*/
public class Person {
private int age;
public int getAge() {
return age;
}
public void setAge(int age) throws Exception{
if (age<0||age>100){
// throw new RuntimeException("年龄不合法");
/*
通常我们使用throw对外抛出一个异常时,就应当在当前方法上使用
throws声明这个异常的抛出,来通知调用者处理
只有抛出Runtimexception时可以不这样做
*/
}
this.age = age;
}
}
package exception;
public class ThrowDemo {
public static void main(String[] args) throws Exception {
Person person=new Person();
/*
当我们调用一个含有throws声明异常抛出的方法时,编译器要求我们
必须处理这个异常,否则编译不通过,处理的方式有两种:
1)使用try-catch捕获异常并处理
2)在当前方法上继续使用throws声明异常的抛出
具体使用哪种取决于异常处理的责任问题,但永远不应当在main
方法上写throws
*/
try{
//满足语法,但是不满足业务的情况!
person.setAge(1800);
}catch (Exception e){
e.printStackTrace();
}
System.out.println(person.getAge());
}
}
子类在重写超类含有throws声明异常抛出的方法时对throws的几种特殊的重写规则
- 允许不在抛出异常
- 允许抛出超类方法抛出异常的部分异常
- 允许抛出超类方法抛出异常的子类型异常
- 不允许抛出超类方法抛出异常的超类型异常(只能比他小,不能比他大)
package exception;
import com.sun.org.apache.bcel.internal.ExceptionConst;
import org.omg.CORBA.PUBLIC_MEMBER;
import java.awt.*;
import java.io.FileNotFoundException;
import java.io.IOException;
/**
* 子类在重写超类含有throws声明异常抛出的方法时对throws的几种特殊的重写规则
*/
public class ThrowsDemo {
// public void dosome()throws IOException, AWTException{}
//允许不在抛出异常
// public void dosome(){}
//允许抛出超类方法抛出异常的部分异常
// public void dosome()throws IOException{}
//允许抛出超类方法抛出异常的子类型异常
// public void dosome()throws FileNotFoundException{}
//不允许抛出超类方法抛出异常的超类型异常(只能比他小,不能比他大)
// public void dosome()throws Exception{}
}