class Test {
static void throwOne() throws SQLException, IllegalAccessException {
System.out.println("Inside throwOne.");
throwTwo();
throw new SQLException("sql");
}
static void throwTwo() throws IllegalAccessException {
System.out.println("Inside throwTwo.");
throw new IllegalAccessException("demo");
}
public static void main(String args[]) {
try {
throwOne();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
throws 是抛出异常,try{...}catch{...}是捕获、处理异常
在throwOne()中,会抛出SQLException,throwOne()不会处理SQLException,他会抛出,由调用她的main方法
来处理,在main方法中,由try语句块,捕获throwOne方法中抛出的异常,并由catch语句块进行处理。又,在throwOne
方法中调用了throwTwo方法,throwTwo抛出了IllegalAccessException 异常,这个IllegalAccessException 由调用他
的throwOne进行处理,而throwOne中没有对IllegalAccessException 进行处理的办法,不能处理,所以继续抛给调用他
的main方法,main会对IllegalAccessException 异常进行捕获和处理。
上面的例子是只能捕获到IllegalAccessException 异常,而捕获不了SQLException的,因为throwTwo抛出异常后,
throwOne也奖抛出IllegalAccessException 异常,语句不继续执行,没有抛出SQLException。
static void throwTwo() throws IllegalAccessException {
System.out.println("Inside throwTwo.");
//throw new IllegalAccessException("demo");
}
如果将throwTwo中的第二行代码注释掉,将不再抛出IllegalAccessException,从而SQLException将会被main捕获处理。