異常

異常Throwable

異常(Throwable).png

概念:

Throwable 類(lèi)是 Java 語(yǔ)言中所有錯(cuò)誤或異常的超類(lèi)。只有當(dāng)對(duì)象是此類(lèi)(或其子類(lèi)之一)的實(shí)例時(shí),才能通過(guò) Java 虛擬機(jī)或者 Java 語(yǔ)句拋出。類(lèi)似地,只有此類(lèi)或其子類(lèi)之一才可以是 子句中的參數(shù)類(lèi)型。

特點(diǎn):

Throwable是一個(gè)實(shí)體類(lèi):可以從他的構(gòu)造方法和方法來(lái)以及他的子類(lèi)看他的特性和屬性。

Error

概述:

Error 是 的子類(lèi),用于指示合理的應(yīng)用程序不應(yīng)該試圖捕獲的嚴(yán)重問(wèn)題。大多數(shù)這樣的錯(cuò)誤都是異常條件。雖然 錯(cuò)誤是一個(gè)“正規(guī)”的條件,但它也是 的子類(lèi),因?yàn)榇蠖鄶?shù)應(yīng)用程序都不應(yīng)該試圖捕獲它。

特點(diǎn):

錯(cuò)誤是無(wú)法處理的,必須改源碼,就相當(dāng)于某個(gè)機(jī)器的零件缺少或者是壞道了必須更換才能讓機(jī)器正常運(yùn)行。

Exception

概念:

Exception 類(lèi)及其子類(lèi)是 Throwable 的一種形式,它指出了合理的應(yīng)用程序想要捕獲的條件。

特點(diǎn):

  • 編譯期異常:程序在編譯器就報(bào)出的異常,這里需要我們先解決這個(gè)異常才能運(yùn)行程序
  • 運(yùn)行期異常:編譯器不會(huì)報(bào)的異常,而是程序在執(zhí)行到某段代碼時(shí)才會(huì)報(bào)出的異常。

用法:

  1. throw關(guān)鍵字

    • 在指定的方法內(nèi)部拋出指定的異常
    • 格式:throw new xxException("產(chǎn)生異常的原因");
    • throw方法后面new的必須是Exception類(lèi)對(duì)象或者Exception類(lèi)的子類(lèi)對(duì)象
    • 當(dāng)throw拋出這個(gè)異常的時(shí)候我們就要對(duì)其進(jìn)行處理不然JVM會(huì)終止程序的運(yùn)行的
      • 當(dāng)new的對(duì)象是RuntimeException或者RuntimeException的子類(lèi)對(duì)象時(shí)我們可以不進(jìn)行處理默認(rèn)交給JVM處理(打印異常對(duì)象,終止程序運(yùn)行)
      • 當(dāng)new的對(duì)象時(shí)編譯器異常時(shí),我們就要對(duì)其進(jìn)行處理了。
        1. throws拋給調(diào)用者
        2. try ......catch捕獲處理
public class Demo_Throw {
    public static void main(String[] args) {
        int [] array = null;
        int [] arr=new int[3];
        int index=0;
        int index1=4;
//        getElement(array,index);
        getElement1(arr,index1);
    }
    private static void getElement1(int[] arr, int index1) {
        if (index1<0||index1>arr.length){
            throw new IndexOutOfBoundsException("index索引越界");
        }
    }
    private static void getElement(int[] array, int index) {
        if (array==null){
            throw new NullPointerException("數(shù)組為空");
        }else {
            int value=array[index];
        }
    }
}
  1. throws關(guān)鍵字

    • throws:處理異常的一種方式,寫(xiě)在方法名后面。
    • 作用:將異常交給方法的調(diào)用者處理,如果他的調(diào)用者也不處理最后將會(huì)由JVM進(jìn)行處理(打印異常類(lèi),終止程序)
    • 格式:修飾符 返回類(lèi)型 方法名稱(chēng)(參數(shù)列表)throws XXXException,YYYException....{}
    • 注意:當(dāng)throws后面接的異常對(duì)象有多個(gè)時(shí),必須都要寫(xiě)上,如果這多個(gè)對(duì)象有子父類(lèi)關(guān)系時(shí),可以只寫(xiě)父類(lèi)
public class Demo_Throws {
    public static void main(String[] args) throws IOException {
        demo("C;\\a.txta");
    }
    private static void demo(String fileName) throws IOException {
        if(!fileName.endsWith(".txt")){
            throw new IOException("file type error" );
        }else {
            System.out.println("file read OK");
        }
    }

}
  1. try....catch...finally捕獲異常進(jìn)行處理

    • 異常的第二種處理方式,當(dāng)throw拋出異常時(shí),我們用它進(jìn)行捕獲然后處理,這樣不影響程序的后續(xù)執(zhí)行,即不會(huì)終止程序,這也是開(kāi)發(fā)中最推薦使用的一種方式。

    • 格式:

      try{
         可能出現(xiàn)異常的代碼塊
      }catch(異常類(lèi)名 變量名){
          //這里可以使用自定義的異常類(lèi),但是自定義的異常類(lèi)必須繼承Exception才能使用
         這里對(duì)異常進(jìn)行處理,一般時(shí)存入錯(cuò)誤日志
      }finally{
         強(qiáng)制要執(zhí)行的(無(wú)論程序是否出現(xiàn)異常都要執(zhí)行的)
      }
      //這里的finally不是一定需要的,finally一般用來(lái)釋放某種資源占用,它不能單獨(dú)存在,必須依托try catch存在
      
    • 使用案例:

public class Demo_TryCatchFinally {
    public static void main(String[] args){
        try {
            demo("C;\\a.txta");
        }catch (IOException e){
            e.printStackTrace();//打印詳細(xì)異常信息
        }finally {
            //釋放IO資源
            System.out.println("成功釋放資源");
        }

    }
    private static void demo(String fileName) throws IOException {
        if(!fileName.endsWith(".txt")){
            throw new IOException("file type error" );
        }else {
            System.out.println("file read OK");
        }
    }

}

總結(jié)

異常處理.png
?著作權(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)容

  • 1、異常 1.1、異常介紹 異常:不正常。生活中的異常:例:在上課時(shí),突然間停電,造成上課終止。 處理:等待來(lái)...
    Villain丶Cc閱讀 1,108評(píng)論 0 5
  • 什么是異常? 異常本質(zhì)上是程序上的錯(cuò)誤,錯(cuò)誤在我們編寫(xiě)程序的過(guò)程中會(huì)經(jīng)常發(fā)生,包括編譯期間和運(yùn)行期間的錯(cuò)誤。 編譯...
    若兮緣閱讀 3,785評(píng)論 0 11
  • 異常分類(lèi) Java將異常分為兩種,Checked異常和Runtime異常。Java認(rèn)為Checked異常都是可以在...
    LLorenzo閱讀 872評(píng)論 0 1
  • Java異常簡(jiǎn)介 Java異常是Java提供的一種識(shí)別及響應(yīng)錯(cuò)誤的一致性機(jī)制。Java異常機(jī)制可以使程序中異常處理...
    JourWon閱讀 1,353評(píng)論 0 5
  • 近來(lái)天氣似乎越來(lái)越囂張了,風(fēng)肆虐的吹,從褲管使勁鉆進(jìn)來(lái),冷得每一個(gè)毛孔都拼命的收縮。 我已經(jīng)三天早上沒(méi)有洗臉了,冷...
    十三平米閱讀 329評(píng)論 0 7

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