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)行期間卻不在類路徑下的類。
? ??