重新拋出違例 //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){}