Java SE-03-異常

  1. Throwable類(lèi)是Java中所有錯(cuò)誤Error和異常Exception的超類(lèi)

  2. Java中的異常被分為兩大類(lèi):編譯時(shí)異常和運(yùn)行時(shí)異常,也被稱為受檢異常和非受檢異常;所有的RuntimeException類(lèi)及其子類(lèi)被稱為運(yùn)行時(shí)異常,其他的異常都是編譯時(shí)異常

    1. 編譯時(shí)異常:必須顯示處理,否則程序就會(huì)發(fā)生錯(cuò)誤,無(wú)法通過(guò)編譯
    2. 運(yùn)行時(shí)異常:無(wú)需顯示處理,也可以和編譯時(shí)異常一樣處理
  3. 常見(jiàn)運(yùn)行時(shí)異常:

    1. NullPointerException空指針異常
    2. IndexOutOfBoundsException索引越界異常
    3. ClassCastException類(lèi)轉(zhuǎn)換異常,如向下轉(zhuǎn)型時(shí)的不安全性
    4. IllegalArgumentException非法參數(shù)異常,如創(chuàng)建SimpleDateFormat時(shí)傳遞的日期格式不對(duì)
  4. Java對(duì)異常的默認(rèn)處理方式:先根據(jù)產(chǎn)生錯(cuò)誤的異常類(lèi)創(chuàng)建該類(lèi)對(duì)象,然后通過(guò)throw將異常拋給上一級(jí),不斷向上拋出直到拋給了JVM,JVM拿到異常后就會(huì)將異常的名稱、異常原因、異常出現(xiàn)的位置等信息輸出在控制臺(tái)并終止程序。

  5. Throwable常用成員方法:

    // 將此throwable和其追溯打印到標(biāo)準(zhǔn)錯(cuò)誤流  ***常用
    void printStackTrace()
    // 返回此throwable的詳細(xì)消息字符串
    String getMessage()
    // 返回此可拋出的簡(jiǎn)短描述
    String toString()
    
  6. 異常處理之try...catch...:程序從try里面的代碼開(kāi)始執(zhí)行;出現(xiàn)異常,會(huì)自動(dòng)生成一個(gè)異常類(lèi)對(duì)象,該異常對(duì)象將被提交給Java運(yùn)行時(shí)系統(tǒng);當(dāng)Java運(yùn)行時(shí)系統(tǒng)接收到異常對(duì)象時(shí),會(huì)到catch中去找匹配的異常類(lèi),找到后進(jìn)行異常的處理;執(zhí)行完畢之后,程序還可以繼續(xù)往下執(zhí)行;被finally控制的語(yǔ)句一定會(huì)執(zhí)行,除非JVM退出

    格式:
    try{
        可能出現(xiàn)異常的代碼;
    } catch(異常類(lèi)名 變量名) {
        異常的處理代碼;
    } finally {
        必須執(zhí)行的代碼;
    }
    
    try必須有,catch和finally只能省略一個(gè)
    
    多catch的順序:
    異常類(lèi)間沒(méi)有繼承關(guān)系,沒(méi)有順序
    異常類(lèi)間有繼承關(guān)系,父類(lèi)異常寫(xiě)在下面
    因?yàn)槎鄳B(tài)原因,父類(lèi)可以抓住子類(lèi)異常
    
    盡量不要在異常處理中使用return:
    1. 如果finally中有return,則程序會(huì)走finally中的return
    2. 如果finally中沒(méi)有return,則先執(zhí)行try或者catch中的return,將其存入臨時(shí)棧中,執(zhí)行完finally語(yǔ)句后才返回臨時(shí)棧中的值
    
    若finally中有return,則try...catch...finall外面的return會(huì)編譯報(bào)錯(cuò)
    若try和catch中都有return,則try...catch...finall外面的return會(huì)編譯報(bào)錯(cuò)
    
  7. 異常處理之throws:

    格式:throws 異常類(lèi)名;
    
    throws:
    用在方法聲明后面,跟的是異常類(lèi)名
    表示拋出異常,由該方法的調(diào)用者來(lái)處理
    表示出現(xiàn)異常的一種可能性,并不一定會(huì)發(fā)生這些異常
    
    throw:
    用在方法體內(nèi),跟的是異常對(duì)象名
    表示拋出異常,由方法體內(nèi)的語(yǔ)句處理
    執(zhí)行throw一定拋出了某種異常
    
  8. 自定義異常:繼承異常類(lèi)

    // 自定義異常示例
    public class MyException extends Exception {
        public MyException() {
        }
    
        public MyException(String message) {
            super(message);
        }
    }
    
  9. 由于多態(tài),繼承中子類(lèi)重寫(xiě)父類(lèi)方法時(shí),子類(lèi)拋出的異常不能大于父類(lèi)的異常;若父類(lèi)沒(méi)拋出異常,則子類(lèi)不能拋出編譯時(shí)異常(可以拋出運(yùn)行時(shí)異常),只能自己處理

若有錯(cuò)誤或補(bǔ)充,歡迎私信

?著作權(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)容