Java程序運(yùn)行的非正常現(xiàn)象叫做運(yùn)行錯誤,根據(jù)其性質(zhì)可分為兩類:錯誤(Error)和異常(Exception); 他們有一個共同的父類(也是所有異常的頂級父類):Throwable。
創(chuàng)新互聯(lián)建站長期為上千余家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為嵊州企業(yè)提供專業(yè)的做網(wǎng)站、網(wǎng)站設(shè)計,嵊州網(wǎng)站改版等技術(shù)服務(wù)。擁有10年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
異常類結(jié)構(gòu)
Error
Error(錯誤)由JVM生成并拋棄不做處理;此類錯誤通常與代碼和執(zhí)行的操作無關(guān),是虛擬機(jī)中出現(xiàn)了比較嚴(yán)重的問題,程序本身無法解決(常見的錯誤有死循環(huán)、內(nèi)存泄漏等)。
一個常見的錯誤為Java虛擬機(jī)錯誤(VirtualMachineError),當(dāng)JVM不再有繼續(xù)執(zhí)行操作所需的內(nèi)存資源時,將出現(xiàn)OutOfMemoryError。這些異常發(fā)生時,Java虛擬機(jī)(JVM)一般會選擇線程終止。
Exception
Exception(異常)作為一個對象使用,由Java程序拋棄或處理;通常異常產(chǎn)生的原因有:代碼或調(diào)用代碼有錯,操作系統(tǒng)資源不可用,公共語言運(yùn)行庫遇到意外;
異常分為由虛擬機(jī)生成的運(yùn)行時異常(RuntimeException,如空指針、數(shù)組越界)和程序意外造成的非運(yùn)行時異常(如IOException);
運(yùn)行時異常:程序可以選擇捕獲處理或不處理直接拋掉;常見的運(yùn)行時異常有算法溢出(超出數(shù)值表達(dá)范圍)、除數(shù)為零、內(nèi)存溢出、空指針、無效參數(shù)等,此類異常是程序本身編程出錯,可以通過調(diào)整異常代碼運(yùn)行方向,使程序繼續(xù)運(yùn)行,直至正常結(jié)束;
非運(yùn)行時異常:RuntimeException類型意外的異常都叫做非運(yùn)行時異常,從程序語法角度講是必須進(jìn)行處理的異常,如果不處理,程序就不能編譯通過;常見的非運(yùn)行異常有IOException,例如:資源文件找不到等,是程序碰到意外情況無法執(zhí)行成功。
注意:異常和錯誤的區(qū)別---異常能被程序本身可以處理,錯誤是無法處理。
可查異常和不可查異常
Java異常(ErrorandException)根據(jù)程序是否能夠編譯通過可以分為另外兩類:可查異常(checkedexceptions)和不可查異常(uncheckedexceptions)。
可查異常
可查異常:對應(yīng)非運(yùn)行時異常,編譯器編譯程序時可以檢查預(yù)計到其中的錯誤,這種異常必須處理,兩種處理方式:try-catch語句捕獲異?;騮hrows子句聲明拋出異常,在方法體外頭部聲明拋出異常類型(使用throws拋出Exception),調(diào)用者可選擇處理接收到的異常。
說到這兩種處理方式,要說到Java異常處理的5個關(guān)鍵字:try、catch、finally、throws、throw
1、使用try-catch語句處理捕捉(方法頭部不用聲明)
try、catch、finally三個語句塊不能單獨(dú)出現(xiàn),三者可以組合為:try-catch/try-catch-finally/try-finally。
catch塊可以有多個,此時只能從上到下匹配其中一個catch塊代碼;
finally最多一個,三個語句塊中定義的變量不可相互訪問。
在該部分中,使用的是try-catch組合來處理可查異常,將異常向上拋出,實(shí)例:
public XMLReaderHDU(String xmlFile){ super(); this.xmlFile = xmlFile; this.fileName=StaticConfig.umlPathPrefixHDU; try { SAXReader reader=new SAXReader(); Document dom=reader.read(xmlFile); root=dom.getRootElement(); } catch(Exception e1) { Handle1…… } catch(Exception e2) { Handle1…… } }
2、使用throws子句聲明拋出(在方法體外頭部聲明拋出異常類型:使用throws拋出Exception)
首先,在方法體內(nèi)部使用throw拋出異常;
然后,在方法體外頭部聲明,使用throws拋出內(nèi)部拋上來的異常;
示例1:try-catch拋出異常
public XMLReaderHDU(String xmlFile) throws Exception { super(); this.xmlFile = xmlFile; this.fileName=StaticConfig.umlPathPrefixHDU; try { SAXReader reader=new SAXReader(); Document dom=reader.read(xmlFile); root=dom.getRootElement(); } catch(Exception e1) { throw new Exception(e1); } }
示例2:throw-throws 自定義異常
private ListreadUCInformation() throws Exception { if(e1.hasContent()) { if(e1.element("name").getText().equals("preCondition")){ uc.setPreCondition(e1.elementText("content")); } else{ throw new Exception("用例約束條件獲取異常,可能原因:約束類型或約束名稱錯誤"); } } }
不可查異常
不可查異常:包括錯誤Error和運(yùn)行時異常RuntimeException
運(yùn)行時異常在程序編譯時可以通過,不能通過靜態(tài)語法檢測出來哪些函數(shù)可能拋出異常,在運(yùn)行時才能發(fā)現(xiàn)異常(即取決于運(yùn)行時狀態(tài),被運(yùn)行態(tài)決定);
可以選擇捕獲處理或顯示的拋除不處理(mustbecaughtordeclearedtobethrown)。這些異常一般是由程序邏輯錯誤引起的,程序應(yīng)該從邏輯角度盡可能避免這類異常的發(fā)生。
總結(jié)
以上就是本文關(guān)于Java異?;A(chǔ)知識解析的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!