Java 異常
異常
在java.lang.Throwable下分為Error和Exception,其中Error是給sun公司用的,是系統(tǒng)出現的問題,我們主要處理的是Exception
Exception:異常,代表程序可能出現的問題,我們通常會用Exception以及他的子類來封裝程序出現的問題.
Exception分為RuntimeException的其他異常
運行時異常:RuntimeException以及其子類,編譯階段不會出現異常提醒,運行時出現的異常,如數組索引越界異常
編譯時異常:編譯階段就會出現異常提醒的,如日期解析異常
異常體系的最上層的父類是Exception
編譯階段:Java不會運行代碼,只會檢查語法是否錯誤,或者做一些性能的優(yōu)化,提醒程序員檢查本地信息
異常的作用:
查看bug的關鍵參考信息
作為方法內部的一種特殊返回值,以便通知調用者底層的執(zhí)行情況
報錯,空指針異常,因為創(chuàng)建的引用類型數組未初始化,默認值為Null,需要創(chuàng)建學生對象放進去Student s1 = new Student(),如果用Null調用getName會引發(fā)空指針異常
異常的處理方式
JVM默認的處理方式
把異常的名稱,原因及出現的位置等信息輸出在控制臺
程序停止執(zhí)行,下面的代碼不會再執(zhí)行了
自己處理(捕獲異常)
格式:
目的:當代碼出現異常時,可以讓程序繼續(xù)往下執(zhí)行
問題1:如果try中沒有遇到問題怎么執(zhí)行?會把try里面所有的代碼全部執(zhí)行完畢,不會執(zhí)行catch里面的代碼,只有當出現了異常才會執(zhí)行catch里面的代碼
問題2:如果try中可能遇到多個問題,怎么執(zhí)行?
要寫多個catch與之對應
如果我們要捕獲多個異常,這些異常如果存在父子關系的話,父類一定要寫在下面如果兩種異常的處理方式一樣:可以在catch中的小括號里面用|同時捕獲多個異常(JDK7出現)
問題3:如果try中遇到的問題沒有被捕獲怎么執(zhí)行?相當于try...catch的代碼白寫了,最后還是會交給虛擬機處理,也就是以紅色字體打印到控制臺并終止執(zhí)行
問題3:如果try中遇到了問題,那么try下面的其他代碼還會執(zhí)行嗎?
不會執(zhí)行了,而是會直接跳轉到對應的catch中執(zhí)行catch里面的語句體 但是如果沒有catch與之匹配,那么還是會交給虛擬機進行處理
異常中的常見方法

printStackTrace是最常用的
拋出處理
throws:寫在方法定義處,表示聲明一個異常,告訴調用者,使用本方法可能會有哪些異常
編譯時異常:必須要寫 運行時異常:可以不寫
throw:寫在方法內,結束方法,手動拋出一場對象,交給調用者,方法中下面的代碼不再執(zhí)行了
小結
虛擬機默認處理異常的方式:把異常信息以紅色字體打印在控制臺,并結束程序
捕獲try...catch:一般在調用處,能讓代碼繼續(xù)往下執(zhí)行
拋出throw throws:在方法中出現異常了,方法就沒有繼續(xù)運行下去的意義了,采用拋出處理,讓該方法結束運行并告訴調用者出現了問題
拋出:告訴調用者出錯了
捕獲:不讓程序停止
自定義異常
定義異常類
寫繼承關系
空參構造
帶參構造
意義:就是為了讓控制臺的報錯信息更加見名知意