Java異常Exception詳細(xì)講解
1、異常中最大的父類Throwable

Throwable可以分為兩種:
Error
Exception:
- 運(yùn)行時(shí)異常(非受檢異常)
- 非運(yùn)行時(shí)異常(受檢異常)
Error錯(cuò)誤:Error是程序無法處理的錯(cuò)誤,它是由jvm產(chǎn)生拋出的,比如OutOfMemoryError,ThreadDeath等,這些異常發(fā)生時(shí),jvm會(huì)選擇終止程序執(zhí)行
Exception:是程序本身可以處理的異常
- 運(yùn)行時(shí)異常:都是RuntimeException類及子類,如NullPointerException(空指針),IndexOutOfBoundException(數(shù)組越界)等,這些異??梢赃x擇捕獲處理,或者可以不處理
- 非運(yùn)行時(shí)異常:(受檢異常)時(shí)除了RuntimeException以外的異常,類型上屬于Exception類,從程序語法角度這些異常必須要進(jìn)行處理,如果不處理,程序不餓能通過編譯,如IOException,SQIException
2、try-catch-finally三條語句注意的問題
- try,catch,finally均不能單獨(dú)使用,三者可以組合使用,組合方式:try…catch, try…catch…finally, try…finally ,其中catch可以有一個(gè)或者多個(gè),finally語句最多只能有一個(gè)
- 三個(gè)語句塊中變量的作用域?yàn)榇a塊,分別獨(dú)立的不能互相訪問,如果要在三塊中都可以訪問,就把變量定義到這些塊外邊
- 如果存在多個(gè)catch塊,最多只會(huì)匹配一個(gè)異常類且執(zhí)行該catch塊代碼,而不會(huì)在執(zhí)行其他catch塊,且匹配順序是從上到下,最多只會(huì)匹配一個(gè)異常類,也就是說也可以一個(gè)異常類都不執(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){
//彈出出錯(cuò)的地方
System.out.println("1");
e.printStackTrace();
//訪問異常,數(shù)組越界
}catch (NullPointerException e){
System.out.println("2");
e.printStackTrace();
//無論有錯(cuò)與否,finally最終執(zhí)行
} finally {
System.out.println("都能執(zhí)行");
}
System.out.println("---------------");
}
}3、final-finally-finalize的各作用
- final:用于定義常量的關(guān)鍵字
- finally:異常中總能執(zhí)行的代碼塊
- finalize() :垃圾回收,該方法是系統(tǒng)調(diào)用,不用程序員手動(dòng)調(diào)用
4、throws關(guān)鍵字
- 定義一個(gè)方法的時(shí)候可以使用throws關(guān)鍵字聲明,表示該方法時(shí)不處理該異常,而是交給方法調(diào)用者處理該異常
- 在定義方法時(shí),throws關(guān)鍵字可以程序員自主選擇使用,如果使用了,那么說明該方法時(shí)不處理該異常的
- 如果主方(main)也使用throws關(guān)鍵字,那么就意味著主方法也不處理異常,最后留給jvm處理,jvm處理異常就是終止程序
- throws拋出一個(gè)子類異常,調(diào)用該方法的調(diào)用者可以不必須處理該異常
注意:
throw關(guān)鍵字:是可以自定義異常,也就是拋異常,拋出的時(shí)候是一個(gè)異常類的對(duì)象
5、throws和throw的區(qū)別
throws:
- 用在方法聲明之后,跟著的是異常類名
- 可以跟多個(gè)異常類,用逗號(hào)隔開
- 表示拋出異常,有該方法的調(diào)用者處理
- throws表示出現(xiàn)異常的一種可能性,并不一定會(huì)發(fā)生異常
throw:
- 用在方法體內(nèi),跟著的是異常對(duì)象
- 只能拋出一個(gè)異常對(duì)象
- 表示拋出異常,有方法體內(nèi)語句處理
- throw拋異常是一定會(huì)發(fā)生,并不是一種可能
代碼表示:
package com.test;
public class Throw {
//throws Exception 代表該方法出現(xiàn)異常時(shí)不做處理
public void deposit(int num1,int num2) throws Exception
{
// RuntimeException()是運(yùn)行時(shí)異常最大的父類
int sum;
if(num2==0){
throw new RuntimeException("可以自定義一個(gè)異常拋出:除數(shù)不能為0");
}else{
sum=num1/num2;
}
}
}到此這篇關(guān)于Java異常Exception詳細(xì)講解的文章就介紹到這了,更多相關(guān)Java異常 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring?Boot項(xiàng)目中解決跨域問題的四種方式總結(jié)
這篇文章主要介紹了瀏覽器同源策略限制導(dǎo)致的跨域問題,并詳細(xì)記錄了常見的跨域解決方案,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-02-02
spring boot定時(shí)器實(shí)現(xiàn)定時(shí)同步數(shù)據(jù)的操作步驟
在Java中,@Scheduled注解是用于指定定時(shí)任務(wù)的執(zhí)行規(guī)則的,這篇文章給大家介紹spring boot定時(shí)器實(shí)現(xiàn)定時(shí)同步數(shù)據(jù)的操作步驟,感興趣的朋友一起看看吧2023-12-12
Logback配置文件這么寫,還說你不會(huì)整理日志?
logback框架會(huì)默認(rèn)加載classpath下命名為logback-spring.xml或logback.xml的配置文件。這篇文章主要介紹了Logback配置文件寫法,需要的朋友可以參考下2020-07-07
解決java web應(yīng)用線上系統(tǒng)偶發(fā)宕機(jī)的情況
這篇文章主要介紹了解決java web應(yīng)用線上系統(tǒng)偶發(fā)宕機(jī)的情況,具有好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-09-09
win10和win7下java開發(fā)環(huán)境配置教程
這篇文章主要為大家詳細(xì)介紹了win7下Java開發(fā)環(huán)境配置教程,win10下Java開發(fā)環(huán)境配置,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06
java發(fā)送post請(qǐng)求使用multipart/form-data格式文件數(shù)據(jù)到接口代碼示例
這篇文章主要介紹了java發(fā)送post請(qǐng)求使用multipart/form-data格式文件數(shù)據(jù)到接口的相關(guān)資料,文中指定了數(shù)據(jù)編碼格式為UTF-8,并強(qiáng)調(diào)了所需依賴工具類,需要的朋友可以參考下2024-12-12
高級(jí)數(shù)據(jù)結(jié)構(gòu)及應(yīng)用之使用bitmap進(jìn)行字符串去重的方法實(shí)例
今天小編就為大家分享一篇關(guān)于高級(jí)數(shù)據(jù)結(jié)構(gòu)及應(yīng)用之使用bitmap進(jìn)行字符串去重的方法實(shí)例,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-02-02
Java實(shí)戰(zhàn)之基于I/O流設(shè)計(jì)的圖書管理系統(tǒng)
這篇文章主要介紹了Java實(shí)戰(zhàn)之基于I/O流設(shè)計(jì)的圖書館管理系統(tǒng),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-04-04

