欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

怎么處理Java中的異常

這篇文章主要講解了“怎么處理Java中的異?!?,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“怎么處理Java中的異?!卑桑?/p>

員工經(jīng)過長期磨合與沉淀,具備了協(xié)作精神,得以通過團(tuán)隊(duì)的力量開發(fā)出優(yōu)質(zhì)的產(chǎn)品。創(chuàng)新互聯(lián)堅(jiān)持“專注、創(chuàng)新、易用”的產(chǎn)品理念,因?yàn)椤皩W⑺詫I(yè)、創(chuàng)新互聯(lián)網(wǎng)站所以易用所以簡單”。公司專注于為企業(yè)提供成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、微信公眾號開發(fā)、電商網(wǎng)站開發(fā),微信小程序定制開發(fā),軟件按需網(wǎng)站建設(shè)等一站式互聯(lián)網(wǎng)企業(yè)服務(wù)。

異常與error介紹

下面還是先讓我們來看一下基本概念吧!

 異常指程序運(yùn)行過程中出現(xiàn)的非正常現(xiàn)象,例如用戶輸入錯誤、除數(shù)為零、需要處理的文件不存在、數(shù)組下標(biāo)越界等。異常機(jī)制本質(zhì)就是當(dāng)程序出現(xiàn)錯誤,程序安全退出的機(jī)制。在Java的異常處理機(jī)制中,引進(jìn)了很多用來描述和處理異常的類,稱為異常類。異常類定義中包含了該類異常的信息和對異常進(jìn)行處理的方法。

Java是采用面向?qū)ο蟮姆绞絹硖幚懋惓5?。處理過程:

  • 拋出異常:在執(zhí)行一個方法時,如果發(fā)生異常,則這個方法生成代表該異常的一個對象,停止當(dāng)前執(zhí)行路徑,并把異常對象提交給JRE。

  • 捕獲異常:JRE得到該異常后,尋找相應(yīng)的代碼來處理該異常。JRE在方法的調(diào)用棧中查找,從生成異常的方法開始回溯,直到找到相應(yīng)的異常處理代碼為止。

讓我們來看看前面所講到的異常類究竟是個什么東西!

其實(shí)所有的異常對象都是派生于Throwable類的一個實(shí)例。如果內(nèi)置的異常類不能夠滿足需要,還可以創(chuàng)建自己的異常類。所有異常的根類為java.lang.Throwable??纯此募易彘L什么樣。

怎么處理Java中的異常

Throwable類下面主要是兩大門派:Error和Exception。

  • Error是程序無法處理的錯誤,表示運(yùn)行應(yīng)用程序中較嚴(yán)重問題,系統(tǒng)JVM已經(jīng)處于不可恢復(fù)的崩潰狀態(tài)中。例如,說內(nèi)存溢出和線程死鎖等系統(tǒng)問題。

  • Exception是程序本身能夠處理的異常。Exception類是所有異常類的父類,其子類對應(yīng)了各種各樣可能出現(xiàn)的異常事件。  通常Java的異??煞譃椋篟untimeException 運(yùn)行時異常CheckedException 已檢查異常下面我們來研究研究這兩個異常。

RuntimeException和 CheckedException異同

首先我們先來看看什么是運(yùn)行時異常。

這類異常通常是由編程錯誤導(dǎo)致的,所以在編寫程序時,并不要求必須使用異常處理機(jī)制來處理這類異常,而是經(jīng)常需要通過增加“邏輯處理來避免這些異?!?。

比如以下常見的幾種異常:

  • ArithmeticException異常

  • int b=0; System.out.println(1/b); //解決:   if(b!=0){      System.out.println(1/b);   }
  • NumberFormatException異常

  • String str = "1234abcf"; System.out.println(Integer.parseInt(str)); //解決:  Pattern p = Pattern.compile("^\\d+$"); Matcher m = p.matcher(str); if (m.matches()) { // 如果str匹配代表數(shù)字的正則表達(dá)式,才會轉(zhuǎn)換     System.out.println(Integer.parseInt(str)); }
  • ClassCastException異常

  • Animal a=new Dog(); Cat c=(Cat)a; //解決:     if (a instanceof Cat) {     Cat c = (Cat) a; }

這里再補(bǔ)充兩點(diǎn),方便大家更好的理解java異常的機(jī)制和處理過程。

  • 在方法拋出異常之后,運(yùn)行時系統(tǒng)將轉(zhuǎn)為尋找合適的異常處理器(exception  handler)。潛在的異常處理器是異常發(fā)生時依次存留在調(diào)用棧中的方法的集合。當(dāng)異常處理器所能處理的異常類型與方法拋出的異常類型相符時,即為合適的異常處理器。

  • 運(yùn)行時系統(tǒng)從發(fā)生異常的方法開始,依次回查調(diào)用棧中的方法,直至找到含有合適異常處理器的方法并執(zhí)行。當(dāng)運(yùn)行時系統(tǒng)遍歷調(diào)用棧而未找到合適的異常處理器,則運(yùn)行時系統(tǒng)終止。同時,意味著Java程序的終止。

上面我們講述了什么是運(yùn)行時異常以及一些處理方式,下面就再來看看什么是已檢查異常吧!

所有不是RuntimeException的異常,統(tǒng)稱為Checked  Exception,又被稱為“已檢查異?!保鏘OException、SQLException等以及用戶自定義的Exception異常。  這類異常在編譯時就必須做出處理, 否則無法通過編譯。

通常異常的處理方式有兩種:

  • 使用“try/catch”捕獲異常

  • 使用“throws”聲明異常。

下面就來詳細(xì)的聊聊吧!

異常的處理

上面已經(jīng)提了,異常處理通常有2種方式。先看看捕獲異常吧。

捕獲異常是通過3個關(guān)鍵詞來實(shí)現(xiàn)的:try-catch-finally。用try來執(zhí)行一段程序,如果出現(xiàn)異常,系統(tǒng)拋出一個異常,可以通過它的類型來捕捉(catch)并處理它,最后一步是通過finally語句為異常處理提供一個統(tǒng)一的出口,finally所指定的代碼都要被執(zhí)行。

這個捕獲異常其實(shí)也是我們在面試的時候會經(jīng)常碰到的問題。下面我們分別再來對各個部分做一個簡單的提示吧!

(1) try

一個try語句必須帶有至少一個catch語句塊或一個finally語句塊  。當(dāng)異常處理的代碼執(zhí)行結(jié)束以后,不會再回到try語句去執(zhí)行尚未執(zhí)行的代碼。

(2) catch

每個try語句塊可以伴隨一個或多個catch語句,用于處理可能產(chǎn)生的不同類型的異常對象。在此介紹一些常用的方法,這些方法均繼承自Throwable類  。

  • toString ()方法,顯示異常的類名和產(chǎn)生異常的原因。

  • getMessage()方法,只顯示產(chǎn)生異常的原因,但不顯示類名。

  • printStackTrace()方法,用來跟蹤異常事件發(fā)生時堆棧的內(nèi)容。

這里有一個需要特別注意的地方,那就是catch捕獲異常時的捕獲順序:

如果異常類之間有繼承關(guān)系,在順序安排上就需注意。越是頂層的類,越放在下面,再不然就直接把多余的catch省略掉。  也就是說先捕獲子類異常再捕獲父類異常。

(3) finally

finally語句塊中始終都要執(zhí)行,除了遇到了System.exit(0)結(jié)束程序運(yùn)行。針對這個特性,所以我們通常在finally中關(guān)閉程序塊已打開的資源,比如:關(guān)閉文件流、釋放數(shù)據(jù)庫連接等。

即使try和catch塊中存在return語句,finally語句也會執(zhí)行。是在執(zhí)行完finally語句后再通過return退出。

在這里就有一道非常經(jīng)典的一個面試題。

public class Test {     public static void main(String[]args) {        System.out.println(new Test().test());;     }     static int test(){        int x = 1;        try{           retun x;        }finally{           System.out.print("jdbk"+ ++x);        }     } } // 問輸出結(jié)果?

先解釋哈這里存在的玄妙吧!

看了上面的講述,我們都知道了當(dāng)try和catch中有return時,finally仍然會執(zhí)行,所以正常邏輯來說此題的答案應(yīng)該是“jdbk2  2”,但這里存在一個陷阱,那就是:

finally是在return后面的表達(dá)式運(yùn)算后執(zhí)行的(此時并沒有返回運(yùn)算后的值,而是先把要返回的值保  存起來,不管finally中的代碼怎么樣,返回的值都不會改變,任然是之前保存的值),所以函數(shù)返回值是  在finally執(zhí)行前確定的。因此正確答案應(yīng)該是:“jdbk2 1”。

還有一點(diǎn)需要注意的就是:finally中最好不要包含return,否則程序會提前退出,返回值不是try或catch中保存的返回值。

接下來再來講講聲明異常吧,它相對來說就比較簡單了。

在一些情況下,當(dāng)前方法并不需要處理發(fā)生的異常,而是向上傳遞給調(diào)用它的方法處理。如果一個方法拋出多個已檢查異常,就必須在方法的首部列出所有的異常,之間以逗號隔開。

public static void readFile(String fileName) throws FileNotFoundException,IOException { }

需要注意的地方就是:

  • 在方法重寫中聲明異常時:子類重寫父類方法時,如果父類方法有聲明異常,那么子類聲明的異常范圍不能超過父類聲明的范圍。

  • 聲明異常我們一般在server層中。在controller層或則數(shù)據(jù)訪問層一般是捕獲異常。

自定義異常

我們?yōu)槭裁匆远x異常?還不是因?yàn)樵诔绦蛑?,可能會遇到JDK提供的任何標(biāo)準(zhǔn)異常類都無法充分描述清楚我們想要表達(dá)的問題。此時我們就可以創(chuàng)建自己的異常類,即自定義異常類。

那我們怎么自定義異常類呢?相信你看了上面的異常類的家族圖應(yīng)該就猜到了。不錯,自定義異常類只需從Exception類或者它的子類派生一個子類即可。如果你繼承Exception類,則為受檢查異常,必須對其進(jìn)行處理;如果不想處理,可以讓自定義異常類繼承運(yùn)行時異常RuntimeException類。通常我們自定義異常類應(yīng)該包含2個構(gòu)造器:一個是默認(rèn)的構(gòu)造器,另一個是帶有詳細(xì)信息的構(gòu)造器。這里舉一個例子。

/**IllegalAgeException:非法年齡異常,繼承Exception類*/ class IllegalAgeException extends Exception {     //默認(rèn)構(gòu)造器     public IllegalAgeException() {      }     //帶有詳細(xì)信息的構(gòu)造器,信息存儲在message中     public IllegalAgeException(String message) {         super(message);     } }     public void setAge(int age) throws IllegalAgeException {         if (age < 0) {             throw new IllegalAgeException("人的年齡不應(yīng)該為負(fù)數(shù)");         }         this.age = age;     }

最后給大家講述一點(diǎn)使用異常機(jī)制的建議:

  • 要避免使用異常處理代替錯誤處理,這樣會降低程序的清晰性,并且效率低下。

  • 處理異常不可以代替簡單測試---只在異常情況下使用異常機(jī)制。

  • 不要進(jìn)行小粒度的異常處理---應(yīng)該將整個任務(wù)包裝在一個try語句塊中。

  • 異常往往在高層處理。

感謝各位的閱讀,以上就是“怎么處理Java中的異?!钡膬?nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對怎么處理Java中的異常這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!

本文標(biāo)題:怎么處理Java中的異常
當(dāng)前路徑:http://chinadenli.net/article16/iegigg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、電子商務(wù)、ChatGPT、App開發(fā)、網(wǎng)站內(nèi)鏈、商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)
热情的邻居在线中文字幕| 免费在线成人午夜视频| 五月天丁香亚洲综合网| 亚洲熟女国产熟女二区三区| 日韩毛片视频免费观看| 国产三级不卡在线观看视频| 亚洲av成人一区二区三区在线| 嫩呦国产一区二区三区av| 国产精品免费不卡视频| 九九蜜桃视频香蕉视频| 欧美日韩成人在线一区| 国产精品乱子伦一区二区三区| 国内精品偷拍视频久久| 国产一区日韩二区欧美| 极品少妇一区二区三区精品视频| 久久精品国产99精品亚洲| 老司机精品一区二区三区| 一区二区免费视频中文乱码国产 | 在线日本不卡一区二区| 精品国产一区二区欧美| 国产麻豆精品福利在线| 国产一区二区三区香蕉av| 亚洲一区二区精品久久av| 男人大臿蕉香蕉大视频| 好吊日在线观看免费视频| 亚洲a级一区二区不卡| 日韩高清一区二区三区四区| 出差被公高潮久久中文字幕| 欧美日韩国产黑人一区| 老司机精品国产在线视频| 国产精品日韩精品最新| 中文字幕区自拍偷拍区| 亚洲国产av一二三区| 国产一区二区精品丝袜| 亚洲精品国产第一区二区多人| 久热99中文字幕视频在线| 91久久精品中文内射| 精品综合欧美一区二区三区 | 久久精品亚洲精品一区| 好东西一起分享老鸭窝| 久久大香蕉一区二区三区|