国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

[六字真言]1.唵.遁入佛門之異常.md

Baaaan / 3373人閱讀

摘要:出現(xiàn)這種情況的可能性太多太多,例如服務(wù)器連接不上參數(shù)不正確等。調(diào)用代碼需要進一步處理和恢復(fù)。當(dāng)然清理資源后,可以繼續(xù)拋出非檢測異常,阻止程序的執(zhí)行。根據(jù)觀察和理解,檢測異常大多可以應(yīng)用于工具類中。

“唵”,表示佛部心,謂念此字時,自己的身體要應(yīng)于佛身,口要應(yīng)于佛口,意要應(yīng)于佛意,所謂身、口、意與佛成一體,才能獲得成就;

異常的選擇

異常的分類,你應(yīng)該知道:

受審查異常

非受審查異常

發(fā)現(xiàn)學(xué)生在使用過程當(dāng)中,沒有區(qū)分,也不知道應(yīng)該什么時候使用?跟不清楚怎么樣合理的使用異常!
我再后面接手的課程體系當(dāng)中,學(xué)生如果在使用異常的情況下,最愛的是Exception,怎么解釋呢,簡單好用?只能心里默默的呵呵!而作為一名開發(fā)人員使用比較多的是非受審查異常[繼承RuntimeException]!往往這個時候,學(xué)生就懵圈了,為什么呢?因為看不到錯誤了,不知道哪里錯了!
心在滴血,因為給自己增加了難度,何必難為自己嫩?
那么,如何使用異常呢?簡單說一下個人的理解:

調(diào)用或者執(zhí)行的代碼不能繼續(xù)執(zhí)行,需要立即終止。出現(xiàn)這種情況的可能性太多太多,例如服務(wù)器連接不上、參數(shù)不正確等。這些時候都適用非檢測異常,不需要調(diào)用代碼的顯式捕捉和處理,而且代碼簡潔明了。

調(diào)用代碼需要進一步處理和恢復(fù)。假如將 SQLException 定義為非檢測異常,這樣操作數(shù)據(jù)時開發(fā)人員理所當(dāng)然的認(rèn)為 SQLException 不需要調(diào)用代碼的顯式捕捉和處理,進而會導(dǎo)致嚴(yán)重的 Connection 不關(guān)閉、Transaction 不回滾、DB 中出現(xiàn)臟數(shù)據(jù)等情況,正因為 SQLException 定義為檢測異常,才會驅(qū)使開發(fā)人員去顯式捕捉,并且在代碼產(chǎn)生異常后清理資源。當(dāng)然清理資源后,可以繼續(xù)拋出非檢測異常,阻止程序的執(zhí)行。根據(jù)觀察和理解,檢測異常大多可以應(yīng)用于工具類中。

胖先生說一下:

讓機器自己去處理,我們不管!

就是我們需要捕獲并且自己處理

在實際開發(fā)當(dāng)中,胖顯示都會把受審查變成非受審查的,但是同時我根據(jù)自己的業(yè)務(wù)需要進行處理!

別把客戶想的太聰明

將異常直接打印在客戶端的例子屢見不鮮,以 JSP 為例,一旦代碼運行出現(xiàn)異常,默認(rèn)情況下容器將異常堆棧信息直接打印在頁面上。其實從客戶角度來說,任何異常都沒有實際意義,絕大多數(shù)的客戶也根本看不懂異常信息,軟件開發(fā)也要盡量避免將異常直接呈現(xiàn)給用戶。

客戶都是比較懶的人,如果出現(xiàn)那種文字,站在你的角度,我想會感覺到厭惡,考察我英語四級能力呢?

 package com.pangsir.test.sample.exception;
 /**
  * 自定義 RuntimeException
  * 添加錯誤代碼屬性,一種簡單的封裝
  */
 public class RuntimeException extends java.lang.RuntimeException { 
     //默認(rèn)錯誤代碼 
     public static final Integer GENERIC = 1000000; 
     //錯誤代碼
     private Integer errorCode; 
      public RuntimeException(Integer errorCode, Throwable cause) {
             this(errorCode, null, cause);
      }
      public RuntimeException(String message, Throwable cause) {
             //利用通用錯誤代碼
             this(GENERIC, message, cause);
      }
      public RuntimeException(Integer errorCode, String message, Throwable cause) {
             super(message, cause);
             this.errorCode = errorCode;
      }
      public Integer getErrorCode() {
             return errorCode;
      } 
 }

正如示例代碼所示,在異常中引入錯誤代碼,一旦出現(xiàn)異常,我們只要將異常的錯誤代碼呈現(xiàn)給用戶,或者將錯誤代碼轉(zhuǎn)換成更通俗易懂的提示。其實這里的錯誤代碼還包含另外一個功能,開發(fā)人員亦可以根據(jù)錯誤代碼準(zhǔn)確的知道了發(fā)生了什么類型異常.

別玷污我

我們授課當(dāng)中經(jīng)常說基于MVC思想的開發(fā)架構(gòu),因此我們將代碼分為controller,Service,Dao等不同的層次,Dao層中經(jīng)常會拋出異常的方法[因為不熟練,因為SQL語句經(jīng)常寫錯誤],都是過來人:
Dao層代碼:

public User load(Integer user_id) throw SQLException {
//根據(jù) ID 查詢數(shù)據(jù)庫,獲取用戶對象信息
}

如果代碼是這樣寫的,沒有什么問題,可以說正確,但是不符合規(guī)范!
從設(shè)計耦合角度仔細(xì)考慮一下,這里的 SQLException 污染到了上層調(diào)用代碼,調(diào)用層需要顯式的必須利用 try-catch 捕捉 或者 向更上層次繼續(xù)拋出。根據(jù)隔離原則,我們可以適當(dāng)修改成:

 public User load(Integer user_id) {
      try{
             //根據(jù) ID 查詢數(shù)據(jù)庫
      }catch(SQLException e){
          //利用非檢測異常封裝檢測異常,降低層次耦合
         throw new RuntimeException(SQLErrorCode, e);
      }finally{
             //關(guān)閉連接,清理資源
      }
 }
別不在乎我的感受

在學(xué)生開發(fā)當(dāng)中,也可以說我為了圖省事的過程當(dāng)中,經(jīng)常說的一句話就是你把異常輸出[打印]控制臺中,其實這樣沒有任何意思!
重要|重要|重要:

這樣的處理沒有意思,因為你沒有中斷程序的執(zhí)行,進而調(diào)用代碼會繼續(xù)自行,導(dǎo)致更多的異常

想想你是否寫過這樣的代碼:

 public void update(User user){
    try{
        //..some code that throws SQLException
     }catch(SQLException ex){
      /**
        *了解的人都知道,這里的異常打印毫無意義,僅僅是將錯誤堆棧輸出到控制臺。
        * 而在 Production[生產(chǎn)] 環(huán)境中,需要將錯誤堆棧輸出到日志。
        * 而且這里 catch 處理之后程序繼續(xù)執(zhí)行,會導(dǎo)致進一步的問題
        * */

      ex.printStacktrace();
     }
 }

代碼重構(gòu)

 public void update(User user){
  try{
     //..some code that throws SQLException
  }
  catch(SQLException ex){
     //轉(zhuǎn)換成非受審查異常
     throw new RuntimeException(“自己描述性語言,例如com.pangsir.user.dao.UserDao.update 執(zhí)行過程出錯”, ex);
  }
  finally{
     //關(guān)閉資源
  }
 }

這個誤區(qū)比較基本,一般情況下都不會犯此 > 低級錯誤 < 。

地主家也沒有余糧

看一下,下面的代碼是否有問題?

 //假設(shè)獲取用戶的所有信息
 List userList = this.userDao.listAll();//
 for(int i=0; i

在講課的時候我們已經(jīng)知道異常處理占用系統(tǒng)資源.別把這個多帶帶看成一個演示示例,想想我們的設(shè)計當(dāng)中從控制層->Service->Dao層

換個角度說,類 A 中執(zhí)行了一段循環(huán),循環(huán)中調(diào)用了 B 類的方法,B 類中被調(diào)用的方法卻又包含 try-catch 這樣的語句塊。褪去類的層次結(jié)構(gòu),代碼和上面如出一轍。

還有一次隱藏的錯誤,這里我就不說了!有過有知道請留言給我,不是錯誤,就是不符合地主家沒有余糧的概念!

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/65089.html

相關(guān)文章

  • Python爬蟲框架Scrapy實戰(zhàn) - 抓取BOSS直聘招聘信息

    原文地址: http://www.jtahstu.com/blog/s... Python爬蟲框架Scrapy實戰(zhàn) - 抓取BOSS直聘招聘信息 零、開發(fā)環(huán)境 MacBook Pro (13-inch, 2016, Two Thunderbolt 3 ports) CPU : 2 GHz Intel Core i5 RAM : 8 GB 1867 MHz LPDDR3 Python 版本: v3...

    caohaoyu 評論0 收藏0
  • Python爬蟲框架Scrapy實戰(zhàn) - 抓取BOSS直聘招聘信息

    原文地址: http://www.jtahstu.com/blog/s... Python爬蟲框架Scrapy實戰(zhàn) - 抓取BOSS直聘招聘信息 零、開發(fā)環(huán)境 MacBook Pro (13-inch, 2016, Two Thunderbolt 3 ports) CPU : 2 GHz Intel Core i5 RAM : 8 GB 1867 MHz LPDDR3 Python 版本: v3...

    zero 評論0 收藏0
  • 上古程序猿堅決反對用Redis,我該怎么說服他?

    摘要:前段時間,有個人吐槽自己的同事是上古程序猿,一直堅持反對使用。上古程序猿堅決反對用,我該怎么說服他分布式鎖如果你是一位后端工程師,面試時八成會被問到,特別是大廠,不僅要求能簡單使用,還要深入理解底層原理,具備解決常見問題的能力。 前段時間,有個人吐槽自己的同事是上古程序猿,一直堅持反對使用Redis。那位上古程序猿設(shè)計公司...

    番茄西紅柿 評論0 收藏2637
  • 上古程序猿堅決反對用Redis,我該怎么說服他?

    摘要:前段時間,有個人吐槽自己的同事是上古程序猿,一直堅持反對使用。那位上古程序猿設(shè)計公司的業(yè)務(wù)系統(tǒng)時候,始終堅持永遠(yuǎn)不要用緩存其他人想用,例如做個接口防重復(fù),一定要用數(shù)據(jù)庫來實現(xiàn),包括定期失效之類的功能。項目中使用,主要考慮性能和并發(fā)。 前段時間,有個人吐槽自己的同事是上古程序猿,一直堅持反對使...

    不知名網(wǎng)友 評論0 收藏0
  • 上古程序員實名反對用Redis,我是拿他沒辦法了

    摘要:前段時間,有個人吐槽自己的同事是上古程序猿,一直堅持反對使用。那位上古程序猿設(shè)計公司的業(yè)務(wù)系統(tǒng)時候,始終堅持永遠(yuǎn)不要用緩存其他人想用,例如做個接口防重復(fù),一定要用數(shù)據(jù)庫來實現(xiàn),包括定期失效之類的功能。項目中使用,主要考慮性能和并發(fā)。 前段時間,有個人吐槽自己的同事是上古程序猿,一直堅持反對使...

    不知名網(wǎng)友 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<