網(wǎng)站建設(shè)之如何找到網(wǎng)站異常
在網(wǎng)站建設(shè)的過(guò)程中,一定會(huì)遇到發(fā)生異常的時(shí)候,那么如何揪出異常的部分呢?這就需要從代碼入手,并且制定周詳?shù)挠?jì)劃。
如果某個(gè)異常發(fā)生的時(shí)候沒(méi)有在任何地方進(jìn)行捕獲,那程序就會(huì)終止執(zhí)行,并在控制臺(tái)上打印出異常信息,其中包括異常的類型和堆棧的內(nèi)容。對(duì)于圖形界面程序(applet和application應(yīng)用程序),在捕獲異常之后,也會(huì)打印出堆棧的信息,但程序?qū)⒎祷氐接脩艚缑娴奶幚硌h(huán)中(在調(diào)試基于圖形界面的程序時(shí),最好保證控制臺(tái)窗口可見,并且沒(méi)有被極小化)。
捕獲一個(gè)異常,必須設(shè)置try/catch語(yǔ)句塊,如果在try語(yǔ)句塊中的任何代碼拋出了一個(gè)在catch+句中說(shuō)明的異常類,那么:
1.程序?qū)⑻^(guò)try語(yǔ)句塊的其余代碼。
2.程序?qū)?zhí)行catch子句中的處理器代碼。
如果在try語(yǔ)句塊中的代碼沒(méi)有拋出任何異常,那么程序?qū)⑻^(guò)catch子句。
如果方法中的任何代碼拋出了一個(gè)在catch+句中沒(méi)有聲明的異常類型,那么這個(gè)方法就會(huì)立刻退出(期待調(diào)用者為這種類型的異常設(shè)計(jì)了catch子句)。
需要注意,try語(yǔ)句中的大多數(shù)代碼都很容易理解:讀取并處理文本行,直到遇到文件結(jié)束符為止。正如在JavaAPI中看到的那樣,read方法有可能拋出一個(gè)IOException異常。在這種情況下,將跳出整個(gè)while循環(huán),進(jìn)入catch子句,并輸出堆棧情況。對(duì)于一個(gè)普通的程序來(lái)說(shuō),這樣處理異?;旧虾虾跚槔?。還有其他的選擇嗎?
通常,最好的選擇是什么也不做,而是將異常傳遞給調(diào)用者。如果read方法出現(xiàn)了錯(cuò)誤,就讓read方法的調(diào)用者去操心!如果采用這種處理方式,就必須聲明這個(gè)方法可能會(huì)拋出一個(gè)IOException。
請(qǐng)記住,編譯器嚴(yán)格地執(zhí)行throws說(shuō)明符。如果調(diào)用了一個(gè)拋出已檢查異常的方法,就必須對(duì)它進(jìn)行處理,或者將它傳遞出去。
哪種方法更好呢?通常,應(yīng)該捕獲那些知道如何處理的異常,而將那些不知道怎樣處理的異常傳遞出去。如果想將異常傳遞出去,就必須在方法的首部添加一個(gè)throws說(shuō)明符以便告知調(diào)用者這個(gè)方法可能會(huì)拋出異常。
但是凡事都會(huì)有例外,規(guī)則也是,如果編寫一個(gè)覆蓋超類的方法,而這個(gè)方法又沒(méi)有拋出異常,那么這個(gè)方法就必須捕獲方法代碼中出現(xiàn)的每一個(gè)已檢查異常。不允許在子類的thrws說(shuō)明符中出現(xiàn)超過(guò)超類方法所列出的異常類范圍。
特別聲明:以上文章內(nèi)容僅代表作者本人觀點(diǎn),不代表ESG跨境電商觀點(diǎn)或立場(chǎng)。如有關(guān)于作品內(nèi)容、版權(quán)或其它問(wèn)題請(qǐng)于作品發(fā)表后的30日內(nèi)與ESG跨境電商聯(lián)系。
二維碼加載中...
使用微信掃一掃登錄
使用賬號(hào)密碼登錄
平臺(tái)顧問(wèn)
微信掃一掃
馬上聯(lián)系在線顧問(wèn)
小程序
ESG跨境小程序
手機(jī)入駐更便捷
返回頂部