java7还有一个增强throw语句也很好用啊
class FirstException extends Exception {
}
class SecondException extends Exception {
}
public class ExceptionDemo {
public static void main(String[] args) {
try {
show("fsirst");
} catch (Exception e) {
e.printStackTrace();
}
}
public static void show(String str) throws FirstException,SecondException {
try{
if(str.equals("first")) {
throw new FirstException();
}else {
throw new SecondException();
}
}catch(Exception e) {
throw e;
}
}
}
这个例子,try块中只能抛出两种异常,但是因为catch里的类型是 Exception,
在java SE7以前的版本中,在方法声明中throws 只能写Exception,但是在java SE7及以后的版本中,可以在throws后面写FirstException和SecondException
——编译器能判断出throw e语句抛出的异常一定来自try块,
并且try块只能抛出FirstException和SecondException。
所以尽管catch里的异常类型是Exception,编译器仍然能够知道它是FirstException和 SecondException的实例。 |