亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Checked vs UnChecked Exception ,使用場合?

2019-11-18 11:29:22
字體:
來源:轉載
供稿:網友

 Checked vs UnChecked 異常 ,使用場合?

異常的概念  

       任何的異常都是Throwable類(為何不是接口??),并且在它之下包含兩個字類Error / Exception,而Error僅在當在java虛擬機中發生動態連接失敗或其它的定位失敗的時候,Java虛擬機拋出一個Error對象。典型的簡易程序不捕捉或拋出Errors對象,你可能永遠不會碰到需要實例化Error的應用,那就讓我們關心一下Exception。

       Exception中比較重要的就是RuntimeException(運行時異常)-可能在執行方法期間拋出但未被捕捉的 RuntimeException 的任何子類都無需在 throws 子句中進行聲明,也就是說你的應用應該不去“關心”(說不關心是不服責任的,但只是你不應該試圖實例化它的字類)。  RuntimeException,就如同你不應該關心Error的產生與處理一樣!RuntimeException描述的是程序的錯誤引起來的,因該由程序負擔這個責任?。?u>從責任這個角度看Error屬于JVM需要負擔的責任;RuntimeException是程序應該負擔的責任;checked exception 是具體應用負擔的責任)

       除了Error與RuntimeException,其他剩下的異常都是你需要關心的,而這些異常類統稱為Checked Exception,至于Error與RuntimeException則被統稱為Unchecked Exception.

         關于 Java 中引入的 Checked Exceptions,目前存在著很多反對意見。正方的觀點是引入 Checked Exceptions,可以增加程度的魯棒性。反方的觀點是 Checked Exceptions 很少被開發人員正確使用過,并且降低了程序開發的生產率和代碼的執行效率。

Java 中定義了兩類異常: 

1) Checked exception: 這類異常都是Exception的子類 。異常的向上拋出機制進行處理,假如子類可能產生A異常,那么在父類中也必須throws A異常??赡軐е碌膯栴}:代碼效率低,耦合度過高。C#中就沒有使用這種異常機制。

2) Unchecked exception: 這類異常都是RuntimeException的子類,雖然RuntimeException同樣也是Exception的子類,但是它們是非凡的,它們不能通過client code來試圖解決,所以稱為Unchecked exception 。  

   

(JAVA視線論壇robbin's view,個人覺得用來做業務流程控制違反了Exception設計的初衷,但可以借鑒一下)

     在使用UseCase來描述一個場景的時候,有一個主事件流和n個異常流。異常流可能發生在主事件流的過程,而try語句里面實現的是主事件流,而catch里面實現的是異常流,在這里Exception不代表程序出現了異?;蛘咤e誤,Exception只是面向對象化的業務邏輯控制方法。假如沒有明白這一點,那么我認為并沒有真正明白應該怎么使用Java來正確的編程。 
      而我自己寫的程序,會自定義大量的Exception類,所有這些Exception類都不意味著程序出現了異?;蛘咤e誤,只是代表非主事件流的發生的,用來進行那些分支流程的流程控制的。例如你往權限系統中增加一個用戶,應該定義1個異常類,UserExistedException,拋出這個異常不代表你插入動作失敗,只說明你碰到一個分支流程,留待后面的catch中來處理這個分支流程。傳統的程序員會寫一個if else來處理,而一個合格的OOP程序員應該有意識的使用try catch 方式來區分主事件流和n個分支流程的處理,通過try catch,而不是if else來從代碼上把不同的事件流隔離開來進行分別的代碼撰寫。

(另外一種觀點,不同于robbin,個人贊同,并引用于此)

1。什么時候拋出異常--涉及到服務類
2。拋出checked還是unchecked的異常--涉及到客戶類

       對第一個問題來說,我想異常本身這個字解釋了某些東西,異常就是我們認為在正常情況下不可能發生的問題,并且服務代碼不知道如何去處理。譬如說我做一個監控程序,需要用壓縮卡提供的API去初始化所有的板卡,API提供的是boolean型的返回值,但我把這個API變成拋出一個異常,因為除非非凡原因,我不認為會發生初始化失敗的情況,當然更不知道怎樣去處理這個問題。又譬如Hibernate里面的LoadObject使用沒有發現這個對象存在,那Hibernate也是認為不可能的,除非其他代碼直接刪除了數據庫里面的記錄,那么也需要拋出異常。當然Hibernate本身也不知道如何處理這種情況。
       但是假如發生的情況是可以預期的,那我不認為應該拋出例外。象上面這個userExist的情況,我認為應該在前面已經分流,應該首先判定這個用戶是否存在,if(userExists()),然后進行處理,而不應當拋出例外。以及login應當返回true或者false。也就是說,這些屬于程序的正常流程,而不是例外,不是異常。把例外作為正常程序流程的控制機制,只不過是把服務代碼中的if轉移到客戶代碼去,沒有減少任何需要處理的代碼,反而增加了系統的負擔(生成例外棧)。
       還有拋出異常的情況是違反方法的先決條件,每一個方法都有自己的先決條件和后置條件,方法只有在正確的前提下才能執行達到一個正確的后果,(所謂類的不變量)。譬如你去存取一個數組的某一個元素,這個存取方法有一個前提條件,就是你的索引應當落入它的最大下標和最小下標之間,不然就應當拋出一個例外。

         對于第二個問題,端視于客戶代碼是否能夠根據這個例外進行合理的處理。假如客戶代碼根本就不知道如何處理這個例外,應當把它作為一個unchecked例外,例如上面下標的問題,客戶代碼用一個不合法的下標來存取數組,那么拋出一個checked例外以后,客戶代碼是+1還是-1?顯然根本就不可能做出“合理的”處理,客戶既然不能處理,還要強制它去處理,那么就是捕捉,打印了事,沒有增加任何價值。但是假如是客戶可以處理的,或者可以選擇不同的方式處理的,那么就可能需要用checked,但我發現很少有這樣的情況。對于類似于RemoteException或者SQLException這些Exception,我一般都轉換為具體的業務Exception,而我所有的業務Exception都是RuntimeException.

         所以我的觀點是,是否拋出例外就是服務代碼是否進行合理的處理,拋出什么類型的例外就是客戶代碼是否能夠合理的處理。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
最新的欧美黄色| 欧美亚洲国产视频小说| 亚洲夜晚福利在线观看| 色先锋久久影院av| 国产精品久久999| 一区二区三区无码高清视频| 欧美黑人性视频| 国产精品爱啪在线线免费观看| 欧美电影免费观看高清完整| 81精品国产乱码久久久久久| 亚洲激情在线观看视频免费| 91精品视频一区| 激情亚洲一区二区三区四区| 国产亚洲综合久久| 91精品国产乱码久久久久久久久| 亚洲精品视频免费在线观看| 亚洲美女视频网| 中文字幕最新精品| 尤物yw午夜国产精品视频明星| 国产美女扒开尿口久久久| 一区二区亚洲欧洲国产日韩| 97在线视频一区| 国产精品一区久久| 久久精品免费播放| www.99久久热国产日韩欧美.com| 国外成人免费在线播放| 日韩精品极品在线观看播放免费视频| 欧美最顶级的aⅴ艳星| 欧美猛交免费看| 久久久久中文字幕2018| 成人免费观看a| 菠萝蜜影院一区二区免费| 亚洲男人天堂2024| 欧美精品少妇videofree| 国产美女精品视频免费观看| 在线精品播放av| 久久久这里只有精品视频| **欧美日韩vr在线| 国产91热爆ts人妖在线| 精品性高朝久久久久久久| 久久精品视频va| 亚洲最大的成人网| 国产精品久久久999| 91爱视频在线| 久久久视频精品| 日韩av电影在线网| 亚洲国产精品福利| 国产一区二区三区日韩欧美| 日韩av手机在线看| 国产精品高潮呻吟久久av无限| 国产午夜一区二区| 欧美精品video| 狠狠色狠色综合曰曰| 亚洲专区国产精品| 日韩精品欧美激情| 国产精品久久久久久久久久| 欧美中文字幕在线| 久久久久久这里只有精品| 国产精品一区二区久久国产| 91中文精品字幕在线视频| 精品久久久精品| 97精品国产97久久久久久春色| 国产精品入口福利| 亚洲一区二区中文字幕| 91在线视频成人| 久久精品2019中文字幕| 中文字幕av一区二区三区谷原希美| 亚洲一区二区在线播放| 日韩av日韩在线观看| 日本亚洲欧洲色| 91精品中文在线| 国产欧美一区二区三区久久| 国产一区二区三区视频在线观看| 国产精品久久久久久久午夜| 亚洲午夜国产成人av电影男同| 国产精品扒开腿做爽爽爽视频| 一区二区欧美亚洲| 亚洲精品国产电影| 亚洲系列中文字幕| 91久久久精品| 福利精品视频在线| 欧美孕妇毛茸茸xxxx| 国产成人精品久久亚洲高清不卡| 国语自产精品视频在线看一大j8| 热久久99这里有精品| 久久久久久美女| 久久精品夜夜夜夜夜久久| 一区二区三区无码高清视频| 日韩av片永久免费网站| 欧美孕妇性xx| 国外视频精品毛片| 影音先锋日韩有码| 日韩视频中文字幕| 精品国产乱码久久久久久虫虫漫画| 亚洲欧美激情精品一区二区| 亚洲国产欧美自拍| 亚洲国产日韩欧美综合久久| 欧美日韩国产第一页| 国产亚洲欧美日韩精品| 日韩精品免费在线视频观看| 另类少妇人与禽zozz0性伦| 欧美成aaa人片免费看| 亚洲a在线观看| 欧美激情一区二区三区久久久| 欧美亚洲第一区| 欧美另类高清videos| 国产精品久久不能| 在线看福利67194| 91产国在线观看动作片喷水| 久久99国产综合精品女同| 国产日本欧美视频| 国产精品综合不卡av| 一区二区三区视频免费在线观看| 九九久久久久久久久激情| 欧美久久精品午夜青青大伊人| 久久久久久久一区二区| 国产97在线|亚洲| 国产精品久久久久久久av大片| 91精品视频播放| 日本成人免费在线| 欧美视频免费在线观看| 国产主播在线一区| 欧美日本高清视频| 日本道色综合久久影院| 精品久久久久国产| 国产精品高清在线观看| 神马久久桃色视频| 国产91精品久久久久久久| 国产精品爽爽爽爽爽爽在线观看| 国产成人啪精品视频免费网| 中文综合在线观看| 久久久中文字幕| 有码中文亚洲精品| 欧美视频在线观看免费| 97色在线观看| 亚洲最大激情中文字幕| 久久精品夜夜夜夜夜久久| 在线精品视频视频中文字幕| 日韩视频免费观看| 97视频在线观看免费高清完整版在线观看| 国产亚洲激情在线| 奇米成人av国产一区二区三区| 日韩高清人体午夜| 国产精品美女久久| 国产精品国语对白| 91久久久亚洲精品| 欧美成年人网站| 91免费版网站入口| 亚洲精品国精品久久99热一| 日韩福利伦理影院免费| 最近2019中文免费高清视频观看www99| 91经典在线视频| 亚洲最大成人在线| 日韩在线视频观看正片免费网站| 久久精品一区中文字幕| 亚洲精品久久久久| 日韩欧美极品在线观看| 国产成人av在线播放| 久久久亚洲国产| 狠狠色狠色综合曰曰| 亚洲999一在线观看www| 精品福利免费观看| 亚洲片av在线| 欧美激情欧美狂野欧美精品|