Java基礎(chǔ) | Exception和Error有什么區(qū)別-02

1,Error:系統(tǒng)錯(cuò)誤,虛擬機(jī)出錯(cuò),跟系統(tǒng)有關(guān)。在代碼中處理不了。

2、Exception:可以捕獲的異常,且作出處理。要么捕獲異常并算出處理,要么繼續(xù)拋出異常。

3、RuntimeException:經(jīng)常出現(xiàn)的錯(cuò)誤,可以捕獲,并作出處理,可以不捕獲,也可以不用拋出。比如arrayIndexOutOfBundsException異??梢圆徊东@,因?yàn)樵谝粋€(gè)程序中,使用很多數(shù)組,如果使用一次捕獲一次,會(huì)產(chǎn)生大量的代碼,可讀性差,這類異常需要程序員自己控制。

4、繼承某個(gè)異常時(shí),重寫(xiě)方法時(shí),要么不拋出異常,要么拋出一模一樣的異常。

5、當(dāng)一個(gè)try后跟了多個(gè)catch時(shí),必須先捕獲小的異常再捕獲大的異常。

6、假如一個(gè)異常發(fā)生了,控制臺(tái)打印了許多行信息,是因?yàn)槌绦蛑卸鄬臃椒ㄕ{(diào)用造成的。關(guān)鍵看類型和行號(hào)。

7、上傳下載不能拋異常。上傳下載一定要關(guān)流。

8、異常不是錯(cuò)誤,異??刂拼a流程不利于代碼簡(jiǎn)單易讀。

9、try catch finally?執(zhí)行流程,與return,break,continue等混合使用注意代碼執(zhí)行順序;

案例:

????NoClassDefFoundError是一個(gè)錯(cuò)誤(Error),而ClassNotFoundException是一個(gè)異常,在Java中對(duì)于錯(cuò)誤和異常的處理是不同的,我們可以從異常中恢復(fù)程序但不應(yīng)該嘗試從錯(cuò)誤中恢復(fù)程序。

ClassNotFoundException?產(chǎn)生原因:

? ? Java支持使用Class.forName方法來(lái)動(dòng)態(tài)地加載類,任意一個(gè)類的類名如果被作為參數(shù)傳遞給這個(gè)方法都將導(dǎo)致該類被加載到時(shí)JVM內(nèi)存中,如果這個(gè)類在類路徑中沒(méi)有被找到,那么此時(shí)就會(huì)在運(yùn)行時(shí)拋出ClassNotFoundException異常。解決該問(wèn)題需要確保需要確保所需的類連同它依賴的包存在于類路徑中,常見(jiàn)問(wèn)題在于類名書(shū)寫(xiě)錯(cuò)誤。

? ? 當(dāng)一個(gè)類已經(jīng)被某個(gè)類加載器加載到內(nèi)存中了,此時(shí)另一個(gè)類加載器以嘗試著動(dòng)態(tài)從同一個(gè)包中加載這個(gè)類。此時(shí)可以通過(guò)控制動(dòng)態(tài)加載過(guò)程,可以避免此情況發(fā)生。

NoClassDefFoundError產(chǎn)生的原因:

? ? 如果JVM或者ClassLoader實(shí)例嘗試加載(可以通過(guò)正常的方法調(diào)用,也可能使用new來(lái)創(chuàng)建新的對(duì)象)類的時(shí)候卻找不到類的定義。要查找的類在編譯的時(shí)候是存在的,運(yùn)行的時(shí)候卻找不到了。這個(gè)時(shí)候就會(huì)出現(xiàn)NoClassDefFoundError。

????造成該問(wèn)題的原因是可能打包過(guò)程漏掉了部分類,或者jar包出現(xiàn)損壞或者篡改。解決這個(gè)問(wèn)題的辦法是查找那些在開(kāi)發(fā)期間存在于類路徑下是在運(yùn)行期間卻不在類路徑下的類。

? ??

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容