Java異常Exception詳細(xì)講解
1、異常中最大的父類Throwable
Throwable可以分為兩種:
Error
Exception:
- 運(yùn)行時異常(非受檢異常)
- 非運(yùn)行時異常(受檢異常)
Error錯誤:Error是程序無法處理的錯誤,它是由jvm產(chǎn)生拋出的,比如OutOfMemoryError,ThreadDeath等,這些異常發(fā)生時,jvm會選擇終止程序執(zhí)行
Exception:是程序本身可以處理的異常
- 運(yùn)行時異常:都是RuntimeException類及子類,如NullPointerException(空指針),IndexOutOfBoundException(數(shù)組越界)等,這些異??梢赃x擇捕獲處理,或者可以不處理
- 非運(yùn)行時異常:(受檢異常)時除了RuntimeException以外的異常,類型上屬于Exception類,從程序語法角度這些異常必須要進(jìn)行處理,如果不處理,程序不餓能通過編譯,如IOException,SQIException
2、try-catch-finally三條語句注意的問題
- try,catch,finally均不能單獨(dú)使用,三者可以組合使用,組合方式:try…catch, try…catch…finally, try…finally ,其中catch可以有一個或者多個,finally語句最多只能有一個
- 三個語句塊中變量的作用域?yàn)榇a塊,分別獨(dú)立的不能互相訪問,如果要在三塊中都可以訪問,就把變量定義到這些塊外邊
- 如果存在多個catch塊,最多只會匹配一個異常類且執(zhí)行該catch塊代碼,而不會在執(zhí)行其他catch塊,且匹配順序是從上到下,最多只會匹配一個異常類,也就是說也可以一個異常類都不執(zhí)行
- catch捕獲的異常類不能重復(fù),且先捕獲子類異常再捕獲父類異常
- 無論try中語句有沒有問題,finally中的語句一定執(zhí)行,finally為程序提供統(tǒng)一的出口,保證程序狀態(tài)的統(tǒng)一管理,通常情況下finally中進(jìn)行資源的關(guān)閉清除工作
package com.exception; public class Test { public static void main(String[] args) { int[] a=new int[5]; try { for (int i = 0; i <10 ; i++) { a[i]=i; } //空指針 }catch (ArrayIndexOutOfBoundsException e){ //彈出出錯的地方 System.out.println("1"); e.printStackTrace(); //訪問異常,數(shù)組越界 }catch (NullPointerException e){ System.out.println("2"); e.printStackTrace(); //無論有錯與否,finally最終執(zhí)行 } finally { System.out.println("都能執(zhí)行"); } System.out.println("---------------"); } }
3、final-finally-finalize的各作用
- final:用于定義常量的關(guān)鍵字
- finally:異常中總能執(zhí)行的代碼塊
- finalize() :垃圾回收,該方法是系統(tǒng)調(diào)用,不用程序員手動調(diào)用
4、throws關(guān)鍵字
- 定義一個方法的時候可以使用throws關(guān)鍵字聲明,表示該方法時不處理該異常,而是交給方法調(diào)用者處理該異常
- 在定義方法時,throws關(guān)鍵字可以程序員自主選擇使用,如果使用了,那么說明該方法時不處理該異常的
- 如果主方(main)也使用throws關(guān)鍵字,那么就意味著主方法也不處理異常,最后留給jvm處理,jvm處理異常就是終止程序
- throws拋出一個子類異常,調(diào)用該方法的調(diào)用者可以不必須處理該異常
注意:
throw關(guān)鍵字:是可以自定義異常,也就是拋異常,拋出的時候是一個異常類的對象
5、throws和throw的區(qū)別
throws:
- 用在方法聲明之后,跟著的是異常類名
- 可以跟多個異常類,用逗號隔開
- 表示拋出異常,有該方法的調(diào)用者處理
- throws表示出現(xiàn)異常的一種可能性,并不一定會發(fā)生異常
throw:
- 用在方法體內(nèi),跟著的是異常對象
- 只能拋出一個異常對象
- 表示拋出異常,有方法體內(nèi)語句處理
- throw拋異常是一定會發(fā)生,并不是一種可能
代碼表示:
package com.test; public class Throw { //throws Exception 代表該方法出現(xiàn)異常時不做處理 public void deposit(int num1,int num2) throws Exception { // RuntimeException()是運(yùn)行時異常最大的父類 int sum; if(num2==0){ throw new RuntimeException("可以自定義一個異常拋出:除數(shù)不能為0"); }else{ sum=num1/num2; } } }
到此這篇關(guān)于Java異常Exception詳細(xì)講解的文章就介紹到這了,更多相關(guān)Java異常 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java中struts2實(shí)現(xiàn)簡單的文件上傳與下載
這篇文章主要為大家詳細(xì)介紹了java中struts2實(shí)現(xiàn)簡單的文件上傳與下載的相關(guān)資料,感興趣的小伙伴們可以參考一下2016-05-05shiro實(shí)現(xiàn)單點(diǎn)登錄(一個用戶同一時刻只能在一個地方登錄)
這篇文章主要介紹了shiro實(shí)現(xiàn)單點(diǎn)登錄(一個用戶同一時刻只能在一個地方登錄)的相關(guān)資料,非常不錯,具有參考借鑒價值,感興趣的朋友一起學(xué)習(xí)吧2016-08-08Java之Swagger配置掃描接口以及開關(guān)案例講解
這篇文章主要介紹了Java之Swagger配置掃描接口以及開關(guān)案例講解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08Java+mysql本地圖片上傳數(shù)據(jù)庫及下載示例
本篇文章主要介紹了Java+mysql本地圖片上傳數(shù)據(jù)庫及下載示例,具有一定的參加價值,有興趣的可以了解一下。2017-01-01Java中從JSON轉(zhuǎn)Java實(shí)體的多種方法詳解
在現(xiàn)在的日常開發(fā)中不管前端還是后端,JSON 格式的數(shù)據(jù)是用得比較多的,甚至可以說無處不在,這篇文章主要給大家介紹了關(guān)于Java中從JSON轉(zhuǎn)Java實(shí)體的多種方法,需要的朋友可以參考下2023-12-12JVM入門之內(nèi)存結(jié)構(gòu)(堆、方法區(qū))
JVM 基本上是每家招聘公司都會問到的問題,它們會這么無聊問這些不切實(shí)際的問題嗎?很顯然不是。由 JVM 引發(fā)的故障問題,無論在我們開發(fā)過程中還是生產(chǎn)環(huán)境下都是非常常見的2021-06-06