国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

異常機制詳解

wanghui / 3463人閱讀

摘要:當運行時系統遍歷調用棧而未找到合適的異常處理器,則運行時系統終止。不可查異常編譯器不要求強制處置的異常包括運行時異常與其子類和錯誤。

目錄介紹

1.什么是異常

2.異常

2.1 異常的概述和分類【了解】

2.2 JVM默認是如何處理異常的【理解】

2.3 異常處理的兩種方式【理解】

2.4 try...catch的方式處理異常【掌握】

2.5 編譯期異常和運行期異常的區別【理解】

2.6 throw的概述以及和throws的區別【掌握】

2.7 異常的注意事項及如何使用異常處理【了解】

2.8 Throwable類中的常用方法

3.Error(錯誤)

4.Exception(異常)

5.處理異常機制深入理解

5.1 拋出異常

5.2 捕獲異常

5.3 異常處理方式不同

6.異常總結

6.1 異常總結

6.2 try-catch-finally規則

6.3 try、catch、finally語句塊的執行順序

6.4 Throws拋出異常的規則

7.自定義異常

好消息

博客筆記大匯總【16年3月到至今】,包括Java基礎及深入知識點,Android技術博客,Python學習筆記等等,還包括平時開發中遇到的bug匯總,當然也在工作之余收集了大量的面試題,長期更新維護并且修正,持續完善……開源的文件是markdown格式的!同時也開源了生活博客,從12年起,積累共計47篇[近20萬字],轉載請注明出處,謝謝!

鏈接地址:https://github.com/yangchong2...

如果覺得好,可以star一下,謝謝!當然也歡迎提出建議,萬事起于忽微,量變引起質變!

0.異常思維導圖

1.什么是異常

1.1 什么是異常?

異常是正常程序流程所不能處理或者沒有處理的異常情況或異常事件,比如算術運算被0除,數組下標越界等。

Java采用try-catch-finally語句捕獲并處理異常并且處理異常。

1.2 finally一定會執行嗎

finally是異常處理的統一出口,常用來實現資源釋放,比如關閉文件,關于數據庫連接等。除非遇到System.exit()強制退出程序外,finally語句塊無論是否發生異常都要執行。

2.異常

2.1 異常的概述和分類

A:異常的概述: 異常就是Java程序在運行過程中出現的錯誤。

B:異常的分類:

C:異常的繼承體系

異常的基類: Throwable

嚴重問題: Error 不予處理,因為這種問題一般是很嚴重的問題,比如: 內存溢出

非嚴重問題: Exception

編譯時異常: 非RuntimeException

運行時異常: RuntimeException

2.2 JVM默認是如何處理異常的【理解】

JVM默認是如何處理異常的

main函數收到這個問題時,有兩種處理方式:

a:自己將該問題處理,然后繼續運行

b:自己沒有針對的處理方式,只有交給調用main的jvm來處理

jvm有一個默認的異常處理機制,就將該異常進行處理.

并將該異常的名稱,異常的信息.異常出現的位置打印在了控制臺上,同時將程序停止運行

2.3 異常處理的兩種方式

try…catch…finally

throws

2.4 try...catch的方式處理異常【掌握】

try...catch處理異常的基本格式

try    {
    可能出現問題的代碼 ;
}catch(異常名 變量名){
    針對問題的處理 ;
}finally{
    釋放資源;
}

注意事項:

a:try中的代碼越少越好

b:catch中要做處理,哪怕是一條輸出語句也可以.(不能將異常信息隱藏)

c:處理多個異常

1:能明確的盡量明確,不要用大的來處理。

2:平級關系的異常誰前誰后無所謂,如果出現了子父關系,父必須在后面。

2.5 編譯期異常和運行期異常的區別【理解】

編譯期異常和運行期異常的區別

Java中的異常被分為兩大類:編譯時異常和運行時異常。

所有的RuntimeException類及其子類的實例被稱為運行時異常,其他的異常就是編譯時異常

編譯時異常: Java程序必須顯示處理,否則程序就會發生錯誤,無法通過編譯

運行時異常: 無需顯示處理,也可以和編譯時異常一樣處理

2.6 throw的概述以及和throws的區別【掌握】

throws的方式處理異常: 定義功能方法時,需要把出現的問題暴露出來讓調用者去處理。那么就通過throws在方法上標識。

throw的概述: 在功能方法內部出現某種情況,程序不能繼續運行,需要進行跳轉時,就用throw把異常對象拋出。

a:throws

用在方法聲明后面,跟的是異常類名

可以跟多個異常類名,用逗號隔開

表示拋出異常,由該方法的調用者來處理

throws表示出現異常的一種可能性,并不一定會發生這些異常

static void pop() throws NegativeArraySizeException {
    // 定義方法并拋出NegativeArraySizeException異常
    int[] arr = new int[-3]; // 創建數組
}

public static void main(String[] args) { // 主方法
    try { // try語句處理異常信息
        pop(); // 調用pop()方法
    } catch (NegativeArraySizeException e) {
        System.out.println("pop()方法拋出的異常");// 輸出異常信息
    }
}

使用throws關鍵字將異常拋給調用者后,如果調用者不想處理該異常,可以繼續向上拋出,但最終要有能夠處理該異常的調用者。
pop方法沒有處理異常NegativeArraySizeException,而是由main函數來處理。

b:throw

用在方法體內,跟的是異常對象名

只能拋出一個異常對象名

表示拋出異常,由方法體內的語句處理

public PlayService getPlayService() {
    PlayService playService = BaseAppHelper.get().getPlayService();
    if (playService == null) {
        //待解決:當長期處于后臺,如何保活?避免service被殺死……
        throw new NullPointerException("play service is null");
    }
    return playService;
}

2.7 異常的注意事項及如何使用異常處理【了解】

A:異常注意事項(針對編譯期異常)

a:子類重寫父類方法時,子類的方法必須拋出相同的異常或父類異常的子類。(父親壞了,兒子不能比父親更壞)

b:如果父類拋出了多個異常,子類重寫父類時,只能拋出相同的異常或者是他的子集,子類不能拋出父類沒有的異常

c:如果被重寫的方法沒有異常拋出,那么子類的方法絕對不可以拋出異常,如果子類方法內有異常發生,那么子類只能try,不能throws

B:如何使用異常處理

原則:如果該功能內部可以將問題處理,用try,如果處理不了,交由調用者處理,這是用throws

區別:

后續程序需要繼續運行就try

后續程序不需要繼續運行就throws

如果JDK沒有提供對應的異常,需要自定義異常。

2.8 Throwable類中的常用方法

注意:catch關鍵字后面括號中的Exception類型的參數e。Exception就是try代碼塊傳遞給catch代碼塊的變量類型,e就是變量名。catch代碼塊中語句"e.getMessage();"用于輸出錯誤性質。通常異常處理常用3個函數來獲取異常的有關信息:

getCause():返回拋出異常的原因。如果 cause 不存在或未知,則返回 null。

getMeage():返回異常的消息信息。

printStackTrace():對象的堆棧跟蹤輸出至錯誤輸出流,作為字段 System.err 的值。

有時為了簡單會忽略掉catch語句后的代碼,這樣try-catch語句就成了一種擺設,一旦程序在運行過程中出現了異常,就會忽略處理異常,而錯誤發生的原因很難查找。

3.Error(錯誤)

Error(錯誤):是程序無法處理的錯誤,表示運行應用程序中較嚴重問題。大多數錯誤與代碼編寫者執行的操作無關,而表示代碼運行時 JVM(Java 虛擬機)出現的問題。例如,Java虛擬機運行錯誤(Virtual MachineError),當 JVM 不再有繼續執行操作所需的內存資源時,將出現 OutOfMemoryError。這些異常發生時,Java虛擬機(JVM)一般會選擇線程終止。

4.Exception(異常)

Exception(異常):是程序本身可以處理的異常。

Exception 這種異常分兩大類運行時異常和非運行時異常(編譯異常)。程序中應當盡可能去處理這些異常。

運行時異常:都是RuntimeException類及其子類異常,如NullPointerException(空指針異常)、IndexOutOfBoundsException(下標越界異常)等,這些異常是不檢查異常,程序中可以選擇捕獲處理,也可以不處理。這些異常一般是由程序邏輯錯誤引起的,程序應該從邏輯角度盡可能避免這類異常的發生。運行時異常的特點是Java編譯器不會檢查它,也就是說,當程序中可能出現這類異常,即使沒有用try-catch語句捕獲它,也沒有用throws子句聲明拋出它,也會編譯通過。

非運行時異常 (編譯異常):是RuntimeException以外的異常,類型上都屬于Exception類及其子類。從程序語法角度講是必須進行處理的異常,如果不處理,程序就不能編譯通過。如IOException、SQLException等以及用戶自定義的Exception異常,一般情況下不自定義檢查異常。

5.處理異常機制深入理解 5.1 拋出異常

當一個方法出現錯誤引發異常時,方法創建異常對象并交付運行時系統,異常對象中包含了異常類型和異常出現時的程序狀態等異常信息。運行時系統負責尋找處置異常的代碼并執行。

5.2 捕獲異常

在方法拋出異常之后,運行時系統將轉為尋找合適的異常處理器(exception handler)。潛在的異常處理器是異常發生時依次存留在調用棧中的方法的集合。當異常處理器所能處理的異常類型與方法拋出的異常類型相符時,即為合適 的異常處理器。運行時系統從發生異常的方法開始,依次回查調用棧中的方法,直至找到含有合適異常處理器的方法并執行。當運行時系統遍歷調用棧而未找到合適 的異常處理器,則運行時系統終止。同時,意味著Java程序的終止。

5.3 異常處理方式不同

Java的異常(包括Exception和Error)分為可查的異常(checked exceptions)和不可查的異常(unchecked exceptions)。

可查異常(編譯器要求必須處置的異常):正確的程序在運行中,很容易出現的、情理可容的異常狀況。可查異常雖然是異常狀況,但在一定程度上它的發生是可以預計的,而且一旦發生這種異常狀況,就必須采取某種方式進行處理。除了RuntimeException及其子類以外,其他的Exception類及其子類都屬于可查異常。這種異常的特點是Java編譯器會檢查它,也就是說,當程序中可能出現這類異常,要么用try-catch語句捕獲它,要么用throws子句聲明拋出它,否則編譯不會通過。

不可查異常(編譯器不要求強制處置的異常):包括運行時異常(RuntimeException與其子類)和錯誤(Error)。

總結:一個方法所能捕捉的異常,一定是Java代碼在某處所拋出的異常。簡單地說,異常總是先被拋出,后被捕捉的。

處理運行時異常

由于運行時異常的不可查性,為了更合理、更容易地實現應用程序,Java規定,運行時異常將由Java運行時系統自動拋出,允許應用程序忽略運行時異常。

處理Error

對于方法運行中可能出現的Error,當運行方法不欲捕捉時,Java允許該方法不做任何拋出聲明。因為,大多數Error異常屬于永遠不能被允許發生的狀況,也屬于合理的應用程序不該捕捉的異常。

處理可查異常

對于所有的可查異常,Java規定:一個方法必須捕捉,或者聲明拋出方法之外。也就是說,當一個方法選擇不捕捉可查異常時,它必須聲明將拋出異常。

6.異常總結 6.1 異常總結
try 塊:用于捕獲異常。其后可接零個或多個catch塊,如果沒有catch塊,則必須跟一個finally塊。
catch 塊:用于處理try捕獲到的異常。
finally 塊:無論是否捕獲或處理異常,finally塊里的語句都會被執行。當在try塊或catch塊中遇到return語句時,finally語句塊將在方法返回之前被執行。在以下4種特殊情況下,finally塊不會被執行:
1)在finally語句塊中發生了異常。
2)在前面的代碼中用了System.exit()退出程序。
3)程序所在的線程死亡。
4)關閉CPU。
6.2 try-catch-finally規則
1)  必須在 try 之后添加 catch 或 finally 塊。try 塊后可同時接 catch 和 finally 塊,但至少有一個塊。
2) 必須遵循塊順序:若代碼同時使用 catch 和 finally 塊,則必須將 catch 塊放在 try 塊之后。
3) catch 塊與相應的異常類的類型相關。
4) 一個 try 塊可能有多個 catch 塊。若如此,則執行第一個匹配塊。即Java虛擬機會把實際拋出的異常對象依次和各個catch代碼塊聲明的異常類型匹配,如果異常對象為某個異常類型或其子類的實例,就執行這個catch代碼塊,不會再執行其他的 catch代碼塊
5) 可嵌套 try-catch-finally 結構。
6) 在 try-catch-finally 結構中,可重新拋出異常。
7) 除了下列情況,總將執行 finally 做為結束:JVM 過早終止(調用 System.exit(int));在 finally 塊中拋出一個未處理的異常;計算機斷電、失火、或遭遇病毒攻擊。
6.3 try、catch、finally語句塊的執行順序
1)當try沒有捕獲到異常時:try語句塊中的語句逐一被執行,程序將跳過catch語句塊,執行finally語句塊和其后的語句;
2)當try捕獲到異常,catch語句塊里沒有處理此異常的情況:當try語句塊里的某條語句出現異常時,而沒有處理此異常的catch語句塊時,此異常將會拋給JVM處理,finally語句塊里的語句還是會被執行,但finally語句塊后的語句不會被執行;
3)當try捕獲到異常,catch語句塊里有處理此異常的情況:在try語句塊中是按照順序來執行的,當執行到某一條語句出現異常時,程序將跳到catch語句塊,并與catch語句塊逐一匹配,找到與之對應的處理程序,其他的catch語句塊將不會被執行,而try語句塊中,出現異常之后的語句也不會被執行,catch語句塊執行完后,執行finally語句塊里的語句,最后執行finally語句塊后的語句;
6.4 Throws拋出異常的規則
1) 如果是不可查異常(unchecked exception),即Error、RuntimeException或它們的子類,那么可以不使用throws關鍵字來聲明要拋出的異常,編譯仍能順利通過,但在運行時會被系統拋出。
2)必須聲明方法可拋出的任何可查異常(checked exception)。即如果一個方法可能出現受可查異常,要么用try-catch語句捕獲,要么用throws子句聲明將它拋出,否則會導致編譯錯誤
3)僅當拋出了異常,該方法的調用者才必須處理或者重新拋出該異常。當方法的調用者無力處理該異常的時候,應該繼續拋出,而不是囫圇吞棗。
4)調用方法必須遵循任何可查異常的處理和聲明規則。若覆蓋一個方法,則不能聲明與覆蓋方法不同的異常。聲明的任何異常必須是被覆蓋方法所聲明異常的同類或子類。
7.自定義異常

使用Java內置的異常類可以描述在編程時出現的大部分異常情況。除此之外,用戶還可以自定義異常。用戶自定義異常類,只需繼承Exception類即可。

在程序中使用自定義異常類,大體可分為以下幾個步驟。

(1)創建自定義異常類。

(2)在方法中通過throw關鍵字拋出異常對象。

(3)如果在當前拋出異常的方法中處理異常,可以使用try-catch語句捕獲并處理;否則在方法的聲明處通過throws關鍵字指明要拋出給方法調用者的異常,繼續進行下一步操作。

(4)在出現異常方法的調用者中捕獲并處理異常。

關于其他內容介紹 01.關于博客匯總鏈接

1.技術博客匯總

2.開源項目匯總

3.生活博客匯總

4.喜馬拉雅音頻匯總

5.其他匯總

02.關于我的博客

我的個人站點:www.yczbj.org,www.ycbjie.cn

github:https://github.com/yangchong211

知乎:https://www.zhihu.com/people/...

簡書:http://www.jianshu.com/u/b7b2...

csdn:http://my.csdn.net/m0_37700275

喜馬拉雅聽書:http://www.ximalaya.com/zhubo...

開源中國:https://my.oschina.net/zbj161...

泡在網上的日子:http://www.jcodecraeer.com/me...

郵箱:yangchong211@163.com

阿里云博客:https://yq.aliyun.com/users/a... 239.headeruserinfo.3.dT4bcV

segmentfault頭條:https://segmentfault.com/u/xi...

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/72030.html

相關文章

  • 四年來Android面試大綱,作為一個Android程序員

    摘要:再附一部分架構面試視頻講解本文已被開源項目學習筆記總結移動架構視頻大廠面試真題項目實戰源碼收錄 Java反射(一)Java反射(二)Java反射(三)Java注解Java IO(一)Java IO(二)RandomAccessFileJava NIOJava異常詳解Java抽象類和接口的區別Java深拷貝和淺拷...

    不知名網友 評論0 收藏0
  • 帶你了解集合世界的fail-fast機制 和 CopyOnWriteArrayList 源碼詳解

    摘要:體現的就是適配器模式。數組對象集合世界中的機制機制集合世界中比較常見的錯誤檢測機制,防止在對集合進行遍歷過程當中,出現意料之外的修改,會通過異常暴力的反應出來。而在增強循環中,集合遍歷是通過進行的。 前言 學習情況記錄 時間:week 2 SMART子目標 :Java 容器 記錄在學習Java容器 知識點中,關于List的重點知識點。 知識點概覽: 容器中的設計模式 從Array...

    young.li 評論0 收藏0
  • 詳解JS錯誤處理:前端JS/Vue/React/Iframe/跨域/Node

    摘要:錯誤上報機制發送數據因為請求本身也有可能會發生異常,而且有可能會引發跨域問題,一般情況下更推薦使用動態創建標簽的形式進行上報。 js錯誤捕獲 js錯誤的實質,也是發出一個事件,處理他 error實例對象 對象屬性 message:錯誤提示信息 name:錯誤名稱(非標準屬性)宿主環境賦予 stack:錯誤的堆棧(非標準屬性)宿主環境賦予 對象類型(7種) Synt...

    張利勇 評論0 收藏0
  • Java經典

    摘要:請注意,我們在聊聊單元測試遇到問題多思考多查閱多驗證,方能有所得,再勤快點樂于分享,才能寫出好文章。單元測試是指對軟件中的最小可測試單元進行檢查和驗證。 JAVA容器-自問自答學HashMap 這次我和大家一起學習HashMap,HashMap我們在工作中經常會使用,而且面試中也很頻繁會問到,因為它里面蘊含著很多知識點,可以很好的考察個人基礎。但一個這么重要的東西,我為什么沒有在一開始...

    xcold 評論0 收藏0

發表評論

0條評論

wanghui

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<