欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報邀請碼778899分享:開發(fā)語言 認(rèn)識JAVA中的異常

柚子快報邀請碼778899分享:開發(fā)語言 認(rèn)識JAVA中的異常

http://yzkb.51969.com/

目錄:

一. 異常概念與體系結(jié)構(gòu)

二.

異常的處理

三. 自定義異常類

一. 異常概念與體系結(jié)構(gòu):

1 異常的概念:在

Java

中,將程序執(zhí)行過程中發(fā)生的

不正常行為

稱為異常,

如:算數(shù)異常:

ArithmeticException

System.out.println(10 / 0);

// 執(zhí)行結(jié)果

Exception in thread "main" java.lang.ArithmeticException: / by zero

數(shù)組越界異常:ArrayIndexOutOfBoundsException

int[] arr = {1, 2, 3};

System.out.println(arr[100]);

// 執(zhí)行結(jié)果

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 100

空指針異常:

NullPointerException

int[] arr = null;

System.out.println(arr.length);

// 執(zhí)行結(jié)果

Exception in thread "main" java.lang.NullPointerException

2.異常的體系結(jié)構(gòu):異常種類繁多,為了對不同異?;蛘咤e誤進(jìn)行很好的分類管理,

Java

內(nèi)部維護(hù)了一個

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

如圖:

從圖中可以看出:

(1).Throwable

是異常體系的頂層類,其派生出兩個重要的子類, Error

Exception

(2). Error:指的是Java虛擬機(jī)無法解決的嚴(yán)重問題,比如:JVM的內(nèi)部錯誤、資源耗盡等,典型代表: StackOverflowError和OutOfMemoryError,一旦發(fā)生回力乏術(shù)。

(3).Exception

異常產(chǎn)生后程序員可以通過代碼進(jìn)行處理,使程序繼續(xù)執(zhí)行。比如:感冒、發(fā)燒。我們平時所說的異常就是Exception。

OutOfMemoryError為內(nèi)存泄漏

:程序中存在未釋放的內(nèi)存資源,導(dǎo)致內(nèi)存占用不斷增加,最終導(dǎo)致內(nèi)存不足等等

StackOverflowError為:無限遞歸下去導(dǎo)致,

超出棧的容量等等

3.

異常的分類:分為

編譯時異常,?

運(yùn)行時異常。

(1). 編譯時異常:

?在程序

編譯期間

發(fā)生的異常,稱為

編譯時異常

,也稱為

受檢查異常

如圖:這個重寫,克隆方法的拷貝,沒有對其捕獲或聲明

下圖則是聲明:

就編譯通過

2.

運(yùn)行時異常:

(1)

在程序

執(zhí)行期間

發(fā)生的異常,稱為運(yùn)行時異常,也稱為

非受檢查異常

(2)RunTimeException以及其子類對應(yīng)的異常,都稱為運(yùn)行時異常。

比如NullPointerException、ArrayIndexOutOfBoundsException、ArithmeticException。

注意:編譯時出現(xiàn)的語法性錯誤,不能稱之為異常。例如將 System.out.println 拼寫錯了, 寫成了

這里也用克隆舉例子,這里沒有實現(xiàn)克隆接口,卻編譯通過了?。?!

但是運(yùn)行會有異常:這就是非受查異常

二.

異常的處理:

在Java中,

異常處理主要的

5

個關(guān)鍵字:

throw

、

try

、

catch

final

、

throws

。用好他們就,可以很好的處理異常了。

1.

異常的拋出

:在Java中,可以借助throw關(guān)鍵字,拋出一個指定的異常對象,將錯誤信息告知給調(diào)用者

注意:

(1).?throw必須寫在方法體內(nèi)部

(2). 拋出的對象必須是Exception 或者 Exception 的子類對象

(3). 如果拋出的是 RunTimeException 或者 RunTimeException 的子類,則可以不用處理,直接交給JVM來處理

(4). 如果拋出的是編譯時異常,用戶必須處理,否則無法通過編譯

(5). 異常一旦拋出,

其后

的代碼就不會執(zhí)行。

如圖:這里還用了,try處理catch捕捉

public static void main(String[] args)throws ArrayIndexOutOfBoundsException {

int[] array = new int[2];

//捕捉異常

try {

//放可能發(fā)生的異常

System.out.println(array[3]);

System.out.println("這里不會再執(zhí)行了");

}catch (ArrayIndexOutOfBoundsException e) {

//捕捉異常

System.out.println("處理了ArrayIndexOutOfBoundsException異常");

//捕捉,打印異常

e.printStackTrace();

}

}

2.異常的捕獲:異常的捕獲,也就是異常的具體處理方式,主要有兩種:

異常聲明throws 以及 try-catch捕獲處理。

拋出異常:

public static void OpenConfig(String filename) throws FileNotFoundException {

if (filename.equals("config.ini")) {

throw new FileNotFoundException("配置文件名字不對");

}

}

3.try-catch

捕獲并處理 :throws對異常并沒有真正處理,而是將異常報告給拋出異常方法的調(diào)用者,由調(diào)用者處理。如果真正要對異常進(jìn)行處理,就需要try-catch。)

此時聲明一下,然后捕獲:(

直接聲明不捕獲也可以

class Exception {

File file;

/*

FileNotFoundException : 編譯時異常,表明文件不存在

此處不處理,也沒有能力處理,應(yīng)該將錯誤信息報告給調(diào)用者,讓調(diào)用者檢查文件名字是否給錯誤了

*/

public static void OpenConfig(String filename) throws FileNotFoundException {

if (filename.equals("config.ini")) {

throw new FileNotFoundException("配置文件名字不對");

}

}

//捕獲

public static void main(String[] args) {

try {

//將可能出現(xiàn)異常的代碼放在這里

OpenConfig("test");

} catch (FileNotFoundException e) {

// 如果try中的代碼拋出異常了,此處catch捕獲時異常類型與try中拋出的異常類型一致時,或者是try中拋出異常的基就會時,就會被捕獲到

e.printStackTrace();

}finally {

// 此處代碼一定會被執(zhí)行到,一般用來關(guān)閉文件,釋放資源

}

}

}

注意:1.try塊內(nèi)拋出異常位置之后的代碼將不會被執(zhí)行。

2. 如果

拋出異常類型與catch時異常類型不匹配

,即異常不會被成功捕獲,也就不會被處理,繼續(xù)往外拋

,直到 JVM收到后中斷程序。

(一般寫法是,用父類異常在最后面兜底)

4.finally:

在寫程序時,

有些特定的代碼,不論程序是否發(fā)生異常,都需要執(zhí)行,比如程序中打開的資源

:網(wǎng)絡(luò)連接、數(shù)據(jù)庫連接、IO

流等,

在程序正?;蛘弋惓M顺鰰r,必須要對資源進(jìn)進(jìn)行回收

。另外,因為

異常會引發(fā)程序的跳轉(zhuǎn),可能導(dǎo)致有些語句執(zhí)行不到

,

finally

就是用來解決這個問題的。

還有

finally

中的代碼一定會執(zhí)行的,一般在

finally

中進(jìn)行一些資源清理的掃尾工作

語法格式:

try{

// 可能會發(fā)生異常的代碼

}catch(異常類型 e){

// 對捕獲到的異常進(jìn)行處理

}finally{

// 此處的語句無論是否發(fā)生異常,都會被執(zhí)行到

}

// 如果沒有拋出異常,或者異常被捕獲處理了,這里的代碼也會執(zhí)行

(補(bǔ)充)異常的處理流程:

如果本方法中沒有合適的處理異常的方式, 就會沿著調(diào)用棧向上傳遞

方法1--》方法2--》方法3---》main方法----》jvm)

三. 自定義異常類:

Java 中雖然已經(jīng)內(nèi)置了豐富的異常類, 但是并不能完全表示實際開發(fā)中所遇到的一些異常,此時就需要維護(hù)符合我們實際情況的異常結(jié)構(gòu).就需要自定義異常

例如, 我們實現(xiàn)一個用戶登陸功能:

根據(jù)業(yè)務(wù)此時我們在處理用戶名密碼錯誤的時候可能就需要拋出兩種異常

注意:

1.自定義異常類,然后繼承自Exception 或者 RunTimeException

2. 實現(xiàn)一個帶有String類型參數(shù)的構(gòu)造方法,參數(shù)含義:出現(xiàn)異常的原因

業(yè)務(wù)代碼:

class login {

private String userName;

private String passWord;

public void loginFo(String userName, String passWord)throws UserException,PassWardException{

if (!this.userName.equals(userName)) {

throw new UserException("拋出自定義,的用戶名錯誤異常");

}

if (!this.passWord.equals(passWord)) {

throw new PassWardException("拋出密碼自定義,的用密碼錯誤異常");

}

System.out.println("登錄成功!");

}

public String getUserName() {

return userName;

}

public void setUserName(String userName) {

this.userName = userName;

}

public String getPassWord() {

return passWord;

}

public void setPassWord(String passWord) {

this.passWord = passWord;

}

}

public class TestException {

public static void main(String[] args) throws UserException {

login login = new login();

login.setPassWord("321");

login.setUserName("haha");

login.loginFo("haha", "323");

/*try {

login.loginFo("haha", "323");

}catch (UserException e) {

e.printStackTrace();

}catch (PassWardException e) {

e.printStackTrace();

}finally {

}*/

}

}

? ? ? ? ? ? ? ? ? ? ? ?

柚子快報邀請碼778899分享:開發(fā)語言 認(rèn)識JAVA中的異常

http://yzkb.51969.com/

推薦閱讀

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19112962.html

發(fā)布評論

您暫未設(shè)置收款碼

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄