欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaSE詳細(xì)講解異常語法

 更新時間:2022年05月07日 10:24:18   作者:星鴉wyk  
異常就是不正常,比如當(dāng)我們身體出現(xiàn)了異常我們會根據(jù)身體情況選擇喝開水、吃藥、看病、等 異常處理方法。 java異常處理機制是我們java語言使用異常處理機制為程序提供了錯誤處理的能力,程序出現(xiàn)的錯誤,程序可以安全的退出,以保證程序正常的運行等

1.異常的概念

Java中將程序執(zhí)行過程中發(fā)生的不正常的行為稱為異常

比較常見的異常如下:

2.異常的體系結(jié)構(gòu)

Throwable:是異常體系的最頂層的類,它有兩個重要的子類,:Error 和 Exception

Exception:我們經(jīng)常說的異常就是Exception,此類問題可以通過代碼進(jìn)行處理從而使程序可以繼續(xù)往下運行

Error:指的是Java虛擬機無法解決的嚴(yán)重問題,這類問題就比較嚴(yán)重了,一旦發(fā)生想要挽回就很困難了,就像人得了不治之癥

異常體系的結(jié)構(gòu)圖大致如下:

異常根據(jù)發(fā)生的時機不同分為編譯時異常(受檢查異常)和運行時異常(非受檢查異常)

RuntimeException以及其子類對應(yīng)的異常都是運行時異常

注:寫代碼的時候出現(xiàn)的語法錯誤不能稱之為異常

3.異常的處理

處理異常的兩個思想:

LBYL:在操作之前進(jìn)行充分的檢查

EAFP:先進(jìn)行操作,在遇到問題的時候再來處理

異常處理的核心思想就是EAFP

3.1拋出異常

首先可定是要找出異常的位置

關(guān)鍵字:throw

語法如下;

throw new xxxException("產(chǎn)生異常的原因")

比如寫一個獲取數(shù)組元素的方法

public static int getElement(int[] arr,int index) {
        if(arr==null) {
            throw new NullPointerException("數(shù)組為空");
        }
        if(index<0||index>=arr.length) {
            throw new ArrayIndexOutOfBoundsException("下標(biāo)非法");
        }
        return arr[index];
    }

注:

  • throw必須是在方法內(nèi)部
  • 拋出的對象必須是Exception類或者其子類對象
  • 如果拋出的是RuntimeException類或者其子類(即運行時異常),可以交給JVM處理
  • 如果拋出的是編譯時異常,需要自己處理,否則代碼無法通過編譯
  • 異常一旦拋出,后面的代碼便不會再執(zhí)行

3.2處理異常

主要有兩種方式throws和try-catch

3.2.1throws

throws是聲明異常,當(dāng)方法拋出編譯時異常時使用throws將異常拋給方法的調(diào)用者來處理。即當(dāng)前方法不處理異常,提醒方法的調(diào)用者處理異常

語法如下:

方法返回值 方法名() throws 異常類型1,異常類型2{......}

之前文章介紹對象進(jìn)行比較和克隆操作常用的接口的時候有出現(xiàn)過這種用法

原文鏈接抽象類和接口

使用注意:

  1. throws位置是在方法的參數(shù)列表后
  2. 聲明的異常必須是Exception類或者其子類
  3. throws后面可以有多個異常,中間用逗號隔開即可,如果是有父子關(guān)系的,聲明父類即可
  4. 調(diào)用聲明拋出異常的方法時,調(diào)用者必須對該異常進(jìn)行處理,或者繼續(xù)使用throws拋出

throw和throws很相像,二者之間的區(qū)別需要注意

throwthrows

在方法內(nèi)使用

跟在方法聲明后面

一個throw只能拋出一個異常

后面可以跟多個異常類名

拋出的異常由方法內(nèi)的語句處理

拋出的異常由方法的調(diào)用者處理

執(zhí)行throw是一定出現(xiàn)了某種異常

表示有出現(xiàn)異常的可能性,并不一定就會出現(xiàn)這些異常

3.2.2try-catch

try-catch就是真正的對異常進(jìn)行處理,語法如下:

  try {
       //可能出現(xiàn)異常的代碼放在此處
} catch(xxxException e) {
       //若try拋出的異常被catch捕獲到,在此處進(jìn)行處理
}

try后面可以有多個catch,catch括號中可以寫多個異常類型,中間使用“|”隔開

還是以上面的獲取數(shù)組元素的方法為例,對其進(jìn)行修改:

 public static int getElement(int[] arr,int index)  {
        return arr[index];
    }
//main方法中使用try-catch
public static void main(String[] args) {
        int[] arr=new int[]{1,2,3,4,5};
        try {
            getElement(null,1);
        } catch(ArrayIndexOutOfBoundsException e) {
            System.out.println("下標(biāo)越界");
        } catch(NullPointerException e) {
            System.out.println("空數(shù)組");
        }
    }

注意:

try塊內(nèi)拋出異常位置之后的代碼不會被執(zhí)行

try拋出的異常需要被catch捕獲才能處理,如果拋出的異常沒有被捕獲,則會繼續(xù)向外拋出,直至JVM中斷程序

如果異常之間具有父子關(guān)系,一定是子類異常在前先被捕獲,父類異常后被捕獲

使用try-catch后只會打印自己代碼塊內(nèi)的信息,上圖中也可以看到,想要異常信息盡可能完整,可使用printStackTrace()方法

此外還有一個關(guān)鍵字:finally

這個關(guān)鍵字需要記住的是:不管程序是否發(fā)生異常,finally中的語句都會被執(zhí)行

基于此特點,所以finally一般是用來進(jìn)行一些資源清理的掃尾工作

還有,不建議在finally中放入return語句,比如下面代碼

 public static int fc() {
        try {
            retrun 1;
        } catch(ArithmeticException e) {
            System.out.println("算數(shù)異常");
        }  finally {
            return 10;
        }
    }

結(jié)果返回的是10,try中的1因為fianlly的存在是無法返回的

3.3異常的處理流程

在JVM中有一塊內(nèi)存空間叫做"虛擬機棧" ,這塊空間是專門用來存儲方法之間的調(diào)用關(guān)系的,這種調(diào)用關(guān)系用“調(diào)用棧”來描述

當(dāng)代碼中出現(xiàn)異常而又沒有對應(yīng)的處理方式的時候,就會沿著調(diào)用棧向上傳遞,直到傳遞到JVM終止程序

異常的處理流程如下:

  • 優(yōu)先執(zhí)行try中的代碼拋出異常
  • 若catch捕獲到異常,則處理異常,否則向上傳遞
  • 如果一直到 main 方法也沒有合適的代碼處理異常, 就會交給 JVM 來進(jìn)行處理, 此時程序就會異常終止

4.自定義異常

雖然Java本身就已經(jīng)有很多異常類,但在實際的開發(fā)中仍然會遇到一些Java中沒有包含的異常,此時就需要自定義異常

具體實現(xiàn)方式如下:

  • 自定義一個類,繼承Exception(編譯時異常)或RunTimeException(運行時異常)
  • 類里面實現(xiàn)一個帶有String類型參數(shù)的構(gòu)造方法,String是為了說明出現(xiàn)異常的原因

到此這篇關(guān)于JavaSE詳細(xì)講解異常語法的文章就介紹到這了,更多相關(guān)Java異常內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關(guān)文章

  • sqlserver的jdbc配置方法

    sqlserver的jdbc配置方法

    這篇文章主要介紹了sqlserver的jdbc配置方法,需要的朋友可以參考下
    2014-04-04
  • Java多線程之Park和Unpark原理

    Java多線程之Park和Unpark原理

    這篇文章主要介紹了Java多線程之Park和Unpark原理,需文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴們有非常好的幫助,要的朋友可以參考下
    2021-04-04
  • 基于傳遞list類型的參數(shù)的問題

    基于傳遞list類型的參數(shù)的問題

    這篇文章主要介紹了基于傳遞list類型的參數(shù)的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • java swagger ui 添加header請求頭參數(shù)的方法

    java swagger ui 添加header請求頭參數(shù)的方法

    今天小編就為大家分享一篇java swagger ui 添加header請求頭參數(shù)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Java 網(wǎng)絡(luò)爬蟲新手入門詳解

    Java 網(wǎng)絡(luò)爬蟲新手入門詳解

    這篇文章主要介紹了Java 網(wǎng)絡(luò)爬蟲新手入門詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • SpringMVC訪問靜態(tài)資源的三種方式小結(jié)

    SpringMVC訪問靜態(tài)資源的三種方式小結(jié)

    這篇文章主要介紹了SpringMVC訪問靜態(tài)資源的三種方式小結(jié),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • 最新評論