Java異常Exception詳細講解

異常就是不正常,比如當(dāng)我們身體出現(xiàn)了異常我們會根據(jù)身體情況選擇喝開水、吃藥、看病、等?異常處理方法。?java異常處理機制是我們java語言使用異常處理機制為程序提供了錯誤處理的能力,程序出現(xiàn)的錯誤,程序可以安全的退出,以保證程序正常的運行等

1、異常中最大的父類Throwable

Java異常Exception詳細講解-1文章源自四五設(shè)計網(wǎng)-http://www.4968ejs.cn/43602.html

Throwable可以分為兩種:文章源自四五設(shè)計網(wǎng)-http://www.4968ejs.cn/43602.html

Error文章源自四五設(shè)計網(wǎng)-http://www.4968ejs.cn/43602.html

Exception:文章源自四五設(shè)計網(wǎng)-http://www.4968ejs.cn/43602.html

  • 運行時異常(非受檢異常)
  • 非運行時異常(受檢異常)

Error錯誤:Error是程序無法處理的錯誤,它是由jvm產(chǎn)生拋出的,比如OutOfMemoryError,ThreadDeath等,這些異常發(fā)生時,jvm會選擇終止程序執(zhí)行文章源自四五設(shè)計網(wǎng)-http://www.4968ejs.cn/43602.html

Exception:是程序本身可以處理的異常文章源自四五設(shè)計網(wǎng)-http://www.4968ejs.cn/43602.html

  • 運行時異常:都是RuntimeException類及子類,如NullPointerException(空指針),IndexOutOfBoundException(數(shù)組越界)等,這些異常可以選擇捕獲處理,或者可以不處理
  • 非運行時異常:(受檢異常)時除了RuntimeException以外的異常,類型上屬于Exception類,從程序語法角度這些異常必須要進行處理,如果不處理,程序不餓能通過編譯,如IOException,SQIException

文章源自四五設(shè)計網(wǎng)-http://www.4968ejs.cn/43602.html

2、try-catch-finally三條語句注意的問題

  • try,catch,finally均不能單獨使用,三者可以組合使用,組合方式:try…catch, try…catch…finally, try…finally ,其中catch可以有一個或者多個,finally語句最多只能有一個
  • 三個語句塊中變量的作用域為代碼塊,分別獨立的不能互相訪問,如果要在三塊中都可以訪問,就把變量定義到這些塊外邊
  • 如果存在多個catch塊,最多只會匹配一個異常類且執(zhí)行該catch塊代碼,而不會在執(zhí)行其他catch塊,且匹配順序是從上到下,最多只會匹配一個異常類,也就是說也可以一個異常類都不執(zhí)行
  • catch捕獲的異常類不能重復(fù),且先捕獲子類異常再捕獲父類異常
  • 無論try中語句有沒有問題,finally中的語句一定執(zhí)行,finally為程序提供統(tǒng)一的出口,保證程序狀態(tài)的統(tǒng)一管理,通常情況下finally中進行資源的關(guān)閉清除工作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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)用者可以不必須處理該異常

注意:文章源自四五設(shè)計網(wǎng)-http://www.4968ejs.cn/43602.html

throw關(guān)鍵字:是可以自定義異常,也就是拋異常,拋出的時候是一個異常類的對象文章源自四五設(shè)計網(wǎng)-http://www.4968ejs.cn/43602.html

5、throws和throw的區(qū)別

throws:文章源自四五設(shè)計網(wǎng)-http://www.4968ejs.cn/43602.html

  • 用在方法聲明之后,跟著的是異常類名
  • 可以跟多個異常類,用逗號隔開
  • 表示拋出異常,有該方法的調(diào)用者處理
  • throws表示出現(xiàn)異常的一種可能性,并不一定會發(fā)生異常

throw:

  • 用在方法體內(nèi),跟著的是異常對象
  • 只能拋出一個異常對象
  • 表示拋出異常,有方法體內(nèi)語句處理
  • throw拋異常是一定會發(fā)生,并不是一種可能

代碼表示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package com.test;
public class Throw {
????//throws Exception 代表該方法出現(xiàn)異常時不做處理
????public void deposit(int num1,int num2) throws Exception
????{
????????// RuntimeException()是運行時異常最大的父類
????????int sum;
????????if(num2==0){
????????????throw new RuntimeException("可以自定義一個異常拋出:除數(shù)不能為0");
????????}else{
???????????sum=num1/num2;
????????}
????}
}

到此這篇關(guān)于Java異常Exception詳細講解的文章就介紹到這了

繼續(xù)閱讀
我的微信
微信掃一掃
weinxin
我的微信
惠生活福利社
微信掃一掃
weinxin
我的公眾號
 

發(fā)表評論

匿名網(wǎng)友
:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

拖動滑塊以完成驗證