Error(錯誤):
是程序無法處理的錯誤科盛,表示運行應用程序中較嚴重問題赊豌。例如等恐,Java虛擬機運行錯誤(Virtual MachineError)
Exception(異常):
是程序本身可以處理的異常吝秕。
異常和錯誤的區(qū)別:異常能被程序本身可以處理,錯誤是無法處理空幻。
Exception分為:可查的異常(checked exceptions)和不可查的異常(unchecked exceptions)
RuntimeException為不可查異常烁峭,其余異常都屬于可查異常(編譯異常)。
編譯性異常(checked exceptions)必須拋出異常秕铛,否則無法編譯通過约郁。
一個 try 塊可能有多個 catch 塊。Java虛擬機會把實際拋出的異常對象依次和各個catch代碼塊聲明的異常類型匹配但两,如果異常對象為某個異常類型或其子類的實例鬓梅,就執(zhí)行這個catch代碼塊,不會再執(zhí)行其他的 catch代碼塊
當try捕獲到異常谨湘,catch語句塊里有處理此異常的情況:在try語句塊中是按照順序來執(zhí)行的绽快,當執(zhí)行到某一條語句出現(xiàn)異常時芥丧,程序?qū)⑻絚atch語句塊,并與catch語句塊逐一匹配坊罢,找到與之對應的處理程序续担,其他的catch語句塊將不會被執(zhí)行,而try語句塊中活孩,出現(xiàn)異常之后的語句也不會被執(zhí)行物遇,catch語句塊執(zhí)行完后,執(zhí)行finally語句塊里的語句憾儒,最后執(zhí)行finally語句塊后的語句询兴;
throws和throw的使用區(qū)別:
throws用在方法聲明中,throw用在方法體中起趾,
如 throw new MyException("除數(shù)不能是負數(shù)"); 程序會在throw語句后立即終止诗舰。
自定義異常:
public class MyException extends Exception {
private static final long serialVersionUID = 1L;
// 提供無參數(shù)的構(gòu)造方法
public MyException() {
}
// 提供一個有參數(shù)的構(gòu)造方法,可自動生成
public MyException(String message) {
super(message);// 把參數(shù)傳遞給Throwable的帶String參數(shù)的構(gòu)造方法
}
}
在異常判斷條件成立的地方調(diào)用throw new MyException()拋出這個自定義異常阳掐。
Java異常try里面有return始衅,finally代碼會執(zhí)行嗎?
會執(zhí)行缭保。finally{}塊的代碼只有在try{}塊中包含遇到System.exit(0);之類的導致Java虛擬機直接退出的語句才會不執(zhí)行汛闸。
當程序執(zhí)行try{}遇到return時,程序會先執(zhí)行return語句艺骂,但并不會立即返回诸老,也就是在將要返回、但并未返回的時候钳恕,程序把執(zhí)行流程轉(zhuǎn)去執(zhí)行finally塊别伏,當finally塊執(zhí)行完成后就直接返回剛才return語句已經(jīng)準備好的結(jié)果。