重新抛出违例
//throw e.fillInStackTrace();
//throw new NullPointerException();
使用这两种方式重新抛出违例将会丢失违例的起源信息
RunntimeException代表的是一个编程错误,不需要我们去刻意的控制,程序员应该尽量的避免这样的错误,这样有助于我们进行调试
丢失的违例
public class MainClass
{
/**
* @param args
*/
public static void main(String[]
args) throws Exception{
//异常的丢失
LostException le = new LostException();
try {
le.i();
} finally{
le.n();
}
}
}
class LostException{
public void n() throws Exception
{
throw new NormalException();
}
public void i() throws Exception
{
throw new ImportantException();
}
}
class NormalException extends Exception{
@Override
public String
toString() {
// TODO Auto-generated
method stub
return "a
normal Exception" ;
}
}
class ImportantException extends Exception{
@Override
public String
toString() {
// TODO Auto-generated
method stub
return "a
important Exception" ;
}
}
ImportantException将会捕获不到,会被覆盖
违例限制
当有继承关系时,子类违例变窄了
finally清除
当在构建器抛出违例时,一般不要尝试finally清除
违例匹配准则
从窄到宽,一旦匹配到则不会再进行向下查找控制器进行匹配
catch(FileNotFoundException e){
}
catch(Exception e){
}