精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Java異常處理

開發 后端
java語言可以說是提供了過于完善的異常處理機制,以致于后來《Thinking in java》的作者Bruce Eckel都專門對他進行了論述。java中的異常機制包括Error和Exception兩個部分。

簡介:異常處理是java語言的重要特性之一,《Three Rules for effective Exception Handling》一文中是這么解釋的:它主要幫助我們在debug的過程中解決下面的三個問題。

什么出錯了

哪里出錯了

為什么出錯

java語言可以說是提供了過于完善的異常處理機制,以致于后來《Thinking in java》的作者Bruce Eckel都專門對他進行了論述。java中的異常機制包括Error和Exception兩個部分。他們都繼承自一個共同的基類Throwable。Error屬于JVM運行中發生的一些錯誤,雖然并不屬于開發人員的范疇,但是有些Error還是由代碼引起的,比如StackOverflowError經常由遞歸操作引起,這種錯誤就是告訴開發者,你一般無法挽救,只能靠JVM。而Exception假設程序員會去處理這些異常,比如數據庫連接出了異常,那么我們可以處理這個異常,并且重新連接等。Exception分為兩種,檢查類型(checked)和未檢查類型(unchecked)。檢查類型的異常就是說要程序員明確的去聲明或者用try..catch語句來處理的異常,而非檢查類型的異常則沒有這些限制,比如我們常見的 NullPointerException 就是非檢查類型的,他繼承自RuntimeException。java是目前主流編程語言中唯一一個推崇使用檢查類型異常的,至少sun是這樣的。關于使用checked還是unchecked異常的論戰一直很激烈。下面是一張java語言中異常的類關系圖。

基本使用

我們在使用java的一些文件或者數據庫操作的時候已經接觸過一些異常了,比如IOException、SQLException等,這些方法被聲明可能會拋出某種異常,因此我們需要對其進行捕獲處理。這就需要基本的try..catch語句了。下圖就是我們經常寫的一個基本結構。try語句塊中寫可能會拋出異常的代碼,之后在catch語句塊中進行捕獲。我們看到catch的參數寫的是一個Exception對象,這就意味著這個語句塊可以捕獲所有的檢查類型的異常(雖然這并不是一種好的寫法,稍后討論),finally總是會保證在***執行,一般我們在里面處理一些清理的工作,比如關閉文件流或者數據庫,網絡等操作。

當然上面的語句塊結構是靈活的,但是try是必須有的,catch和finally兩者至少有一個,當然catche的數量可以有多個。有時候try語句塊中可能拋出多種類型的異常,這個時候,我們可以寫多個catch語句來捕獲不同類型的異常,一個比較好的寫法如下:

  1. try{  
  2.     // ..invoke some methods that may throw exceptions  
  3. }catch(ExceptionType1 e){  
  4.     //...handle exception  
  5. }catch(ExceptionType2 e){  
  6.     //...handle exception  
  7. }catch(Exception e){  
  8.     //...handle exception  
  9. }finally{  
  10.     //..do some cleaning :close the file db etc.  

當異常不滿足前兩個type的時候,exception會將異常捕獲。我們發現這個寫法比較類似switch case的結構控制語句,但實際上,一旦某個catch得到匹配后,其他的就不會就匹配了,有點像加了break的case。有一點需要注意catch(Exception)一定要寫在***面,catch是順序匹配的,后面匹配Exception的子類,編譯器就會報錯。

初次學習try..catch總會被其吸引,所以大量的使用這種結果,以達到某種“魯棒性”。(這語句也是程序員表白的***)。但try語句實際上執行的時候會導致棧操作。即要保存整個方法的調用路徑,這勢必會使得程序變慢。fillInStackTrace()是Throwable的一個方法,用來執行棧的操作,他是線程同步的,本身也很耗時。這里問題在StackOverFlow上曾經有過一段非常經典的討論,原文。 的確當我們在try中什么都不做,或者只執行一個類似加法的簡單調用,那么其執行效率和goto這樣的控制語句是幾乎一樣的。但是誰會寫這樣的代碼呢?

總之不要總是試圖通過try catch來控制程序的結構,無論從效率還是代碼的可讀性上都不好。

try catch好的一面

try catch雖然不推薦用于程序結構的控制,但是也具有重要的意義,其設計的一個好處就是,開發人員可以把一件事情當做事務來處理,事務也是數據庫中重要的概念,舉個例子,比如完成訂單的這個事務,其中包括了一個動作序列,包括用戶提交訂單,商品出庫,關聯等。當這個序列中某一個動作執行失敗的時候,數據統一恢復到一個正常的點,這樣就不會出現,你付完了帳,商品卻沒有給你的情況。我們在try語句塊中就像執行一個事務一樣,當出現了異常,就會在catch中得到統一的處理,保證數據的完整無損。其實很多不好的代碼也是因為沒有好好利用catch語句的語言,導致很多異常就被淹沒了,這個后面介紹。

定制詳細的異常

我們可以自己定義異常,以捕獲處理某個具體的例子。創建自己的異常類,可以直接繼承Exception或者RuntimeException。區別是前者是簡稱類型的,而后者為檢查類型異常。Sun官方力挺傳統的觀點,他建議開發者都是用檢查類型的異常,即你一定要去處理的異常。下面是定義的一個簡單的異常類.

  1. public class SimpleException extends Exception{  
  2.     SimpleException(){}  
  3.     SimpleException(String info){  
  4.         super(info);  
  5.     }  

我們覆寫了兩個構造方法,這是有意義的。通過傳遞字符串參數,我們創建一個異常對象的時候,可以記錄下詳細的信息,這樣這個異常被捕獲的時候就會顯示我們之前定義的詳細信息。比如用下面的代碼測試一下我們定義的異常類:

  1. public class Test {  
  2.     public void fun() throws SimpleException{  
  3.         throw new SimpleException("throwing from fun");  
  4.     }  
  5.     public static void main(String[] args) {  
  6.         Test t = new Test();  
  7.         try{  
  8.             t.fun();  
  9.         }catch(SimpleException e){  
  10.             e.printStackTrace();  
  11.         }  
  12.     }  

運行就會得到下面的結果 printStackTrace是打印調用棧的方法,他有三個重載方法,默認的是將信息輸出到System.err。這樣我們就可以清晰的看到方法調用的過程,有點像操作系統中的中斷,保護現場。

SimpleException: throwing from fun
at Test.fun(Test.java:4)
at Test.main(Test.java:9)

略微麻煩的語法

我們自己實現的異常有時候會用到繼承這些特性,在異常繼承的時候有一些限制。那就是子類不能拋出基類或所實現的接口中沒有拋出的異常.比如有如下的接口:

  1. public interface InterfaceA {  
  2.     public void f() throws IOException;  

我們的Test類實現這個接口,那么Test的f方法要么不拋出異常,要么只能拋出IOException,其實關于這里還有更瑣碎的規矩,詳細可以參考《Java Puzzlers》第37個謎題。所以這和傳統的繼承和實現接口正好相反,面向對象的繼承是擴大化,而這正好是縮小了。

關于checked和unchecked的論戰

傳統的觀點里,sun認為"因為 Java 語言并不要求方法捕獲或者指定運行時異常,因此編寫只拋出運行時異常的代碼或者使得他們的所有異常子類都繼承自 RuntimeException ,對于程序員來說是有吸引力的。這些編程捷徑都允許程序員編寫 Java 代碼而不會受到來自編譯器的所有挑剔性錯誤的干擾,并且不用去指定或者捕獲任何異常。 盡管對于程序員來說這似乎比較方便,但是它回避了 Java 的捕獲或者指定要求的意圖,并且對于那些使用您提供的類的程序員可能會導致問題。"他強調盡量不使用unchecked異常。

但《Thinking in java》的作者Eckel卻改變了自己的想法, 他在自己博客上的一篇文章(這篇文章很好,表達也很簡單)專門列舉了使用checked異常的弊端。他指出正式檢查類型讓導致了很多的異常不能被程序員發現。開發人員有更大的自由去決定是不是要處理一個異常。即使忘記處理了某個異常,他也會在某個地方拋出來被發現,而不至于丟失。checked異常使得代碼的可讀性變差,并且正在暗暗的鼓勵人們去淹沒異常。現在很多IDE都在提醒我們,某個方法要跑出異常,然后甚至自動幫我們生成catch或者throw。這是非常可怕的行為,這導致了我們很多catch語句里面什么都沒有,就像一個陷阱一樣。

checked異常帶來的另一個問題是,代碼的難維護性,因為要在方法聲明上加上throws,如果方法的實現發生了某個變化,有了新的異常,那么我們不得不去修改方法的聲明。還有一點不好的就是不能明確的暴露異常的特征。比如我們登錄成績系統的時候,如果用戶名注冊,我們可能期待一個NoSuchStudentException但是實際看到的可能是一個SQLException。《Effective java》中第 43 條:拋出與抽象相適應的異常。講的就是這個原則,即拋出的異常應該是和抽象的概念一致的,比如我們在一個系統無論遇到什么具體的問題,但是大部分我們看到的都只是SQLException而已。

關于如何選擇,Bloch的建議是為可恢復的條件使用檢查型異常,為編程錯誤使用運行時異常。我的感覺是選擇檢查的異常就一定要”處理“,當然此處的處理一定是真正的處理而不是空寫一個catch語句而已。不知道未來的java會怎樣對待checked和unchecked,畢竟現在java是唯一一個支持檢查異常的主流編程語言了。

好的原則

Fail Fast:就是要盡早的拋出異常,這樣有有助于更加精確的定位出錯的地點和原因。這個也比較好理解,比如用戶名字不合法的時候馬上拋出,UserNameIllegalException,如果沒有及時拋出異常,那么不合法的名字可能會導致一個SQLException,但是程序報給你一個SQLException,你卻很難直接得知一定是用戶名不合法造成的。Fail Fast這種思想,在java實現ArrayList的機制中也有很好的體現。

Catch late:不要在方法內部過早的處理異常,特別是什么也不做的處理,那就更加的可怕了。因為如果“無作為”的處理很可能導致后面繼續出現新的異常(比如錯誤的用戶名會引發后面一些列錯誤,程序還不能處理好錯誤的用戶名,后面的就更處理不了了),這就給調試增加了很大的困難。一個好的經驗是將異常處理交給調用者,方法只在及時的地方拋出異常,技術上實現的方式就是給方法聲明throws,標出所有可能要拋出的異常。

Doc:文檔的重要性,特別是非檢查的異常,一定要在文檔中注明。

異常處理是java非常重要的特性,上面是一些關于異常使用的討論,當然更多知識還是需要實踐中發現。

原文鏈接:http://www.cnblogs.com/octobershiner/archive/2012/12/20/2827120.html

【編輯推薦】

  1. 淺談異常與戀愛
  2. 一見鐘情!Java閉包
  3. 8種常見的Java不規范代碼
  4. Java 動態代理(Proxy)
  5. 為什么Java程序占用的內存比實際分配的多
責任編輯:張偉 來源: 博客園
相關推薦

2023-12-11 14:19:00

Java程序異常

2018-08-20 16:25:48

編程語言Java異常處理

2011-04-06 10:52:51

Java異常處理

2023-10-10 13:23:18

空指針異常Java

2023-05-28 13:09:47

Java異常應用

2011-07-05 10:20:38

java

2010-10-09 16:40:52

2012-11-19 14:29:38

JavaJava異常異常處理

2013-08-22 17:10:09

.Net異常處理

2020-07-02 22:42:18

Java異常編程

2009-06-25 14:05:40

Java應用技巧

2010-05-10 09:21:46

2019-11-05 17:10:19

Java開發編程語言

2013-04-07 10:01:26

Java異常處理

2011-07-21 15:20:41

java異常處理機制

2012-11-12 10:32:48

IBMdw

2018-07-11 19:41:47

MySQL定義異常異常處理

2009-07-17 17:34:03

SwingWorker異常處理

2018-02-06 09:05:25

Java異常處理代碼

2017-06-02 10:25:26

Java異常處理
點贊
收藏

51CTO技術棧公眾號

国模一区二区三区白浆| 国产探花在线精品| 午夜电影一区二区三区| 精品一卡二卡三卡四卡日本乱码| 国产中文字幕视频| 欧美激情电影| 亚洲国产精品久久久久秋霞不卡| 国产xxxxx在线观看| 日本欧美在线视频免费观看| 国产成人aaaa| 国产精品com| 日韩福利小视频| 白嫩白嫩国产精品| 欧美性感美女h网站在线观看免费 欧美性xxxx在线播放 | 国产一级久久久久毛片精品| 9999精品免费视频| 色婷婷精品大在线视频| 91视频成人免费| 精华区一区二区三区| 福利一区福利二区| 国产欧美精品va在线观看| 亚洲国产精一区二区三区性色| 欧美午夜精彩| 日韩理论片久久| 人妻换人妻仑乱| 中文字幕系列一区| 精品国产鲁一鲁一区二区张丽| 欧美日韩亚洲国产成人| 免费在线超碰| av电影在线观看一区| 91免费看国产| 在线观看毛片网站| 首页亚洲欧美制服丝腿| 久久久久久中文字幕| 日本激情视频一区二区三区| 伊人久久大香线蕉综合网站| 精品国产凹凸成av人网站| 亚洲综合123| 日韩专区视频网站| 欧美日韩在线免费视频| 免费日韩视频在线观看| 美女扒开腿让男人桶爽久久软| 亚洲免费资源在线播放| 一本一生久久a久久精品综合蜜| 国产在线高清| 久久一夜天堂av一区二区三区| 国产精品日韩高清| 国产高清免费av| 精品一区二区国语对白| 国产美女精品视频| 中文字幕你懂的| 免费精品视频在线| 国产主播喷水一区二区| 91免费视频播放| 久久se精品一区二区| 国产欧美日韩亚洲精品| 在线中文字幕网站| 国产资源在线一区| 3d动漫精品啪啪一区二区三区免费| 97超碰资源站| 国产精品一区免费在线观看| 亚洲xxx视频| 乱色精品无码一区二区国产盗| 成人午夜激情在线| 精品国产综合| 免费a在线观看| 中文字幕第一区二区| 亚洲乱码一区二区三区| 快射视频在线观看| 亚洲综合成人在线| 内射国产内射夫妻免费频道| 成人午夜视屏| 精品视频资源站| 日本网站在线看| 中文字幕日韩在线| 日韩精品在线第一页| www.久久国产| 日韩精品1区| 欧美区二区三区| 天天综合天天干| 蜜臀av性久久久久蜜臀aⅴ| 成人黄在线观看| 国模人体一区二区| 久久久久青草大香线综合精品| 日韩精品不卡| 亚洲小说区图片区都市| 亚洲va韩国va欧美va精品| 亚洲人成无码www久久久| 久久亚洲国产精品尤物| 日韩欧美你懂的| 日韩乱码人妻无码中文字幕久久| 色综合蜜月久久综合网| 欧美极品美女视频网站在线观看免费| 日韩欧美亚洲视频| 蜜桃av一区二区三区| 国产精品久久久对白| 国产视频网址在线| 一级做a爱片久久| 免费日韩视频在线观看| 涩爱av色老久久精品偷偷鲁| 日韩激情在线视频| 国精品无码一区二区三区| 一本久道久久综合狠狠爱| 成人日韩av在线| 欧美巨乳在线| 一区二区三区不卡在线观看 | 男人的午夜天堂| 在线综合视频| 亚洲影院色在线观看免费| 久久久久久青草| 一区二区理论电影在线观看| 日本美女高潮视频| 国产精品15p| 久久精品中文字幕一区| 伊人手机在线视频| 国产福利91精品一区| 视频在线观看成人| 人狥杂交一区欧美二区| 日韩美女在线视频| 中国毛片直接看| 日本不卡视频在线| 开心色怡人综合网站| 色呦呦在线播放| 欧美日产国产精品| 免费看91的网站| 欧美一级播放| 久久久久久草| av美女在线观看| 日韩一区二区三区视频在线观看| 四虎国产成人精品免费一女五男| 性8sex亚洲区入口| 久久久久久久有限公司| 多野结衣av一区| 精品国产亚洲在线| 免费在线观看一级片| 精品一区二区三区在线观看国产| 日本免费高清一区二区| 天天免费亚洲黑人免费| 亚洲精品中文字幕女同| 伊人久久综合视频| 99久久er热在这里只有精品66| 日韩a级黄色片| 精品国产一区二区三区2021| 日韩视频精品在线| 一区二区三区精彩视频| 中文字幕欧美日本乱码一线二线| 青青在线免费观看视频| 要久久爱电视剧全集完整观看| 51精品国产黑色丝袜高跟鞋| 天天射天天操天天干| 亚洲h精品动漫在线观看| 一边摸一边做爽的视频17国产 | 欧美三级午夜理伦三级在线观看 | 亚洲欧美日韩中文在线制服| 麻豆精品久久久久久久99蜜桃| 99re视频精品| 国产成人精品视频ⅴa片软件竹菊| 亚洲制服欧美另类| 日本精品免费观看| 国产女主播在线直播| 在线看国产一区| 四季av中文字幕| 久久er99热精品一区二区| 中文字幕精品在线播放| 99久久婷婷国产综合精品青牛牛| 欧美精品激情在线观看| 香蕉久久一区二区三区| 在线视频你懂得一区二区三区| 国产午夜福利一区| 久久草av在线| 欧美一级视频在线播放| 牲欧美videos精品| 国产精品爽爽ⅴa在线观看| 国产调教视频在线观看| 精品国偷自产国产一区| 欧美 日韩 精品| 国产精品久久免费看| 亚洲国产欧美91| 国产精品日韩久久久| 亚洲精品国产精品久久| 午夜电影一区| 欧美一二三视频| 麻豆传媒在线免费| 亚洲国内精品在线| 在线播放一级片| 午夜在线成人av| 日本爱爱爱视频| 国产麻豆精品在线观看| 日韩欧美国产免费| 五月精品视频| 久久精品综合一区| 国产一区二区三区精品在线观看| 欧美激情亚洲一区| 国产高清视频在线| 亚洲精品在线观看视频| 日批视频免费观看| 亚洲高清久久久| 亚洲色图日韩精品| 97久久超碰精品国产| 国产3p在线播放| 一本综合精品| dy888午夜| 欧美理论在线播放| 精品国产乱码久久久久久88av| 玖玖精品在线| 欧美中文字幕第一页| av在线播放观看| 中文字幕亚洲欧美一区二区三区| 超碰人人人人人人| 欧美日韩一区二区欧美激情| 天堂网一区二区三区| 亚洲免费观看高清完整版在线观看| yy1111111| 国产乱子伦一区二区三区国色天香| 成人av一级片| 国产精品mm| 强伦女教师2:伦理在线观看| 国内精品伊人久久久| 国产精品区一区| 欧美日韩午夜电影网| 国产精品自拍视频| 电影亚洲精品噜噜在线观看| 97精品国产97久久久久久| 50度灰在线| 久久精品视频免费播放| 黄色av网站在线看| 日韩成人免费视频| 日韩一级片免费| 欧美xxxxxxxx| www.日韩高清| 欧美一卡2卡三卡4卡5免费| 曰批又黄又爽免费视频| 色av成人天堂桃色av| 久久久久久久极品| 精品福利在线看| 日韩欧美三级在线观看| 亚洲成人av资源| 中文字幕一区二区三区手机版| 亚洲精品成人少妇| 欧美成人精品欧美一级私黄| 亚洲视频在线观看一区| 成年人二级毛片| 亚洲欧美另类在线| 希岛爱理中文字幕| 亚洲欧美日韩一区二区| 国产一区二区视频在线观看免费| 日韩毛片高清在线播放| 欧美美女性生活视频| 国产精品色眯眯| 操她视频在线观看| 亚洲人123区| 国产精品成人免费观看| 一区二区三区精品视频| 国产小视频在线观看免费| 亚洲图片欧美视频| www成人在线| 日本韩国精品一区二区在线观看| 男人天堂视频网| 在线看国产日韩| 国产精品乱码久久久| 91精品国产色综合久久ai换脸 | 日韩中文在线| 国产欧美日韩综合一区在线观看| 久久久免费毛片| 欧美在线3区| 欧美激情偷拍自拍| 成年丰满熟妇午夜免费视频 | 日批视频在线播放| 亚洲午夜激情免费视频| 日本最黄一级片免费在线| 久久777国产线看观看精品| hd国产人妖ts另类视频| 38少妇精品导航| 台湾天天综合人成在线| 波多野结衣久草一区| 欧美激情网址| 亚洲巨乳在线观看| 国产在线不卡| 亚洲精品中文字幕无码蜜桃| 久久精品国产一区二区| 久久久久亚洲av片无码v| 99久久国产综合色|国产精品| av男人的天堂av| 亚洲精品成人天堂一二三| 日韩精品一区二区亚洲av| 欧美美女激情18p| 日本黄色三级视频| 伊人伊成久久人综合网小说| 三级网站视频在在线播放| 欧美最猛性xxxx| 日韩在线精品强乱中文字幕| 欧洲亚洲一区| 亚洲天堂男人| jizzzz日本| 99国产欧美另类久久久精品| 黄大色黄女片18免费| 性做久久久久久久免费看| 中文字幕观看在线| 亚洲国产日韩欧美在线动漫| 午夜国产福利在线| 欧美在线视频播放| 日韩中文字幕一区二区高清99| 欧美大陆一区二区| 国语精品一区| 日本不卡一区二区在线观看| 99久久99久久精品免费观看| 99自拍视频在线| 91福利在线导航| 姝姝窝人体www聚色窝| 另类天堂视频在线观看| 性欧美1819sex性高清| 成人自拍网站| 天天综合网91| 中文久久久久久| 26uuu精品一区二区三区四区在线| 青青草手机视频在线观看| 欧美写真视频网站| 全部免费毛片在线播放网站| 久久国产精品影视| 国产精品无码久久久久| 欧美在线播放一区二区| 亚洲一级在线| 99热超碰在线| 亚洲国产综合91精品麻豆| 国产白浆在线观看| 色一情一乱一区二区| 欧美羞羞视频| 免费在线一区二区| 亚洲中午字幕| av无码av天天av天天爽| 亚洲a一区二区| 日本精品一二区| 欧美日韩福利视频| 一本一道久久a久久| 女女百合国产免费网站| 国产一区中文字幕| 91制片厂在线| 欧美日韩国产不卡| 欧美被日视频| 成人免费视频97| 亚洲精品成人| 亚洲精品久久久久久| 一区二区在线观看免费视频播放| 国产尤物视频在线观看| 久久这里有精品视频| 欧一区二区三区| 久久综合久久久久| 成人精品在线视频观看| 精品视频一区二区在线观看| 精品卡一卡二卡三卡四在线| heyzo一区| 久久99精品久久久久久青青日本 | 污污视频在线免费看| 午夜精品美女自拍福到在线| 美腿丝袜亚洲图片| 欧美色图另类小说| 久久精品视频在线看| 中文字幕男人天堂| 欧美成人一区二区三区电影| 98视频精品全部国产| 99在线精品免费视频| 91视频国产资源| 亚洲国产无线乱码在线观看| 日韩亚洲精品视频| 网站一区二区| www.玖玖玖| 亚洲国产精品激情在线观看| 97国产精品久久久| 欧美日本亚洲视频| 日本一道高清一区二区三区| 国产视频一区二区视频| 自拍偷拍亚洲欧美日韩| 成人久久精品人妻一区二区三区| 2019亚洲日韩新视频| 日韩电影二区| 久久久久中文字幕亚洲精品 | 无码人妻丰满熟妇区毛片18| 国产欧美一区二区精品性| 国产农村妇女毛片精品久久| 国内精品一区二区三区| 欧美猛男男男激情videos| 日本黄色福利视频| 亚洲www啪成人一区二区麻豆| 成人午夜影视| 国产成人免费观看| 免费精品视频最新在线| 国产精品30p| 中文字幕日韩av综合精品| 成人涩涩网站| 三上悠亚在线一区二区| 午夜精品久久久久久久| 色影院视频在线| 久久精品magnetxturnbtih| 国内一区二区在线| 天堂中文在线网| 欧美俄罗斯性视频| 成人羞羞视频播放网站| 亚洲婷婷在线观看| 91精品在线观看入口| 欧美一区国产|