異常主要包括下面三種類型
"檢查性異常"描述了正確程序中所發(fā)生的問題,這些問題一般情況下是因為外在環(huán)境的條件不滿足而引起的,如用戶錯誤及I/O問題.例如,程序試圖打開一個并不存在的遠程Socket端口.這種錯誤不能歸結到程序本身邏輯的錯誤,而很有可能是遠程機器名字 錯誤(用戶拼寫錯誤)引起的.如果這個遠程機器名是用戶輸入提供的,這種錯誤不可避免,對于一個商業(yè)型的軟件系統(tǒng),程序的開發(fā)者必須處理這個問題并恢復系統(tǒng).Java編譯器強制要求你處理這類異常,如果沒有捕捉這類異常,程序將不能被編譯.
"運行期異常"通常意味著程序存在Bug,如數組越界,被0除,入參不滿足規(guī)范等這類問題導致運行期的異常.這類異常一般需要通過更改程序來避免.所以Java編譯器比強制要求開發(fā)人員處理這類異常.
"錯誤"一般情況下是非常少見的,也很難通過程序來解決它.它可能源于一個程序Bug,但一般情況下更可能來源于環(huán)境的問題,如內存耗盡等問題."錯誤"在程序中無須處理它,而又運行環(huán)境處理.
在使用finally時,在以下特殊情況,finally塊不會被執(zhí)行:
在finally塊中發(fā)生了異常
程序所在的線程死亡.
在前面的代碼中用System.exit()退出運行.
關閉CPU.
對于多個異常的捕捉處理
處理規(guī)則:子類異常的處理塊必須在父類異常的處理塊之前,否則會發(fā)生編譯錯誤.如
try
{
}
catch(GrandchildException e1)
{
...
}
catch(ChildException e2)
{
.....
}
catch(ParentExceotion e3)
{
....
}
巧妙利用異常
當方法體中的代碼發(fā)生異常時,可以不予處理直接將異常"踢"給調用者.此外,也可通過語句產生一個異常.
自己編寫的的程序也可以向外拋出異常,首先實例化一個異常對象,然后用throw關鍵字將這個異常拋出去.考試,大提示合在一起如throw new IOException("文件不存在");
將這兩步合起來的好處是:在創(chuàng)建異常時會包含其創(chuàng)建處的行信息,異常被捕捉時可以通過Stack Trace的形式報告這些信息.如果在同一行代碼創(chuàng)建和拋出異常,對于程序的調試將非常有用
"檢查性異常"描述了正確程序中所發(fā)生的問題,這些問題一般情況下是因為外在環(huán)境的條件不滿足而引起的,如用戶錯誤及I/O問題.例如,程序試圖打開一個并不存在的遠程Socket端口.這種錯誤不能歸結到程序本身邏輯的錯誤,而很有可能是遠程機器名字 錯誤(用戶拼寫錯誤)引起的.如果這個遠程機器名是用戶輸入提供的,這種錯誤不可避免,對于一個商業(yè)型的軟件系統(tǒng),程序的開發(fā)者必須處理這個問題并恢復系統(tǒng).Java編譯器強制要求你處理這類異常,如果沒有捕捉這類異常,程序將不能被編譯.
"運行期異常"通常意味著程序存在Bug,如數組越界,被0除,入參不滿足規(guī)范等這類問題導致運行期的異常.這類異常一般需要通過更改程序來避免.所以Java編譯器比強制要求開發(fā)人員處理這類異常.
"錯誤"一般情況下是非常少見的,也很難通過程序來解決它.它可能源于一個程序Bug,但一般情況下更可能來源于環(huán)境的問題,如內存耗盡等問題."錯誤"在程序中無須處理它,而又運行環(huán)境處理.
在使用finally時,在以下特殊情況,finally塊不會被執(zhí)行:
在finally塊中發(fā)生了異常
程序所在的線程死亡.
在前面的代碼中用System.exit()退出運行.
關閉CPU.
對于多個異常的捕捉處理
處理規(guī)則:子類異常的處理塊必須在父類異常的處理塊之前,否則會發(fā)生編譯錯誤.如
try
{
}
catch(GrandchildException e1)
{
...
}
catch(ChildException e2)
{
.....
}
catch(ParentExceotion e3)
{
....
}
巧妙利用異常
當方法體中的代碼發(fā)生異常時,可以不予處理直接將異常"踢"給調用者.此外,也可通過語句產生一個異常.
自己編寫的的程序也可以向外拋出異常,首先實例化一個異常對象,然后用throw關鍵字將這個異常拋出去.考試,大提示合在一起如throw new IOException("文件不存在");
將這兩步合起來的好處是:在創(chuàng)建異常時會包含其創(chuàng)建處的行信息,異常被捕捉時可以通過Stack Trace的形式報告這些信息.如果在同一行代碼創(chuàng)建和拋出異常,對于程序的調試將非常有用