[六字真言]1.唵仏門に逃げ込む異常md

4416 ワード


異常な選択
異常な分類は、次のことを知っておくべきです.
  • 受審異常
  • 非審査異常
  • 学生が使う過程で、区別がなく、いつ使うべきか分からないことに気づいた.どのように合理的に異常を使うか分からない!私があとから引き継ぐカリキュラムの中で、学生が異常を使っている場合、一番好きなのはExceptionですが、どう説明すればいいですか.簡単で使いやすいですか.心の中で黙ってほほほ!開発者として使用されることが多いのは非審査異常[RuntimeExceptionを継承]です!よくこの时、学生はぼんやりしていて、どうしてですか?間違いが見えなくなったので、どこが間違っているのか分かりません! , , ?では、異常をどのように使用しますか?個人的な理解を簡単に説明します.
  • 呼び出しまたは実行されたコードは実行を続行できず、直ちに終了する必要がある.サーバが接続されていない、パラメータが正しくないなど、このような状況が発生する可能性が多すぎます.これらの場合、 が適用され、コードの明示的なスナップと処理を呼び出す必要がなく、コードが簡潔明瞭である.
  • 呼び出しコードは、さらに処理および復元する必要がある.SQLExceptionを非検出異常と定義すると、開発者は、SQLExceptionが呼び出しコードの明示的なキャプチャや処理を必要とせず、さらに深刻なConnectionが閉じない、Transactionがロールバックしない、DBに汚れたデータが現れるなどの事態を招くのは当然である.SQLExceptionが検出異常と定義されているからこそ、開発者は、コードに異常が発生した後にリソースをクリーンアップするために、明示的にスナップします.もちろん、リソースをクリーンアップした後、非検出異常を投げ出し続け、プログラムの実行を阻止することができます.観察と理解によれば,検出異常の多くはツールクラスに適用できる.

  • 太った先生は言いました.
  • 機械に自分で処理させて、私たちは気にしません!
  • は私たちが捕獲し、自分で処理する必要がある
  • です.
    実際の開発では、デブディスプレイは審査を非審査にしますが、同時に私は自分の業務の必要に応じて処理します!
    お客様の考えをあまり賢くしないでください.
    クライアントに異常を直接印刷する例は珍しくなく、 JSP を例にとると、コード実行に異常が発生すると、デフォルトではコンテナは異常スタック情報をページに直接印刷します.実際には、お客様の観点から言えば、いかなる異常も実際の意味がなく、ほとんどのお客様も異常情報を全く理解していないので、ソフトウェア開発もできるだけ異常を直接ユーザーに提示しないようにしなければなりません.
    お客様は怠け者ですが、もしその文字が現れたら、あなたの立場に立って、私は嫌悪を感じて、私の英語の4級能力を考察すると思いますか?
     package com.pangsir.test.sample.exception;
     /**
      *     RuntimeException
      *         ,       
      */
     public class RuntimeException extends java.lang.RuntimeException { 
         //       
         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;
          } 
     }
    

    サンプルコードに示すように、例外にエラーコードを導入し、例外が発生すると、例外のエラーコードをユーザーに提示するか、エラーコードをより分かりやすいヒントに変換します.実はここのエラーコードにはもう一つの機能が含まれており、開発者もエラーコードに基づいてどのようなタイプの異常が発生したかを正確に知ることができる.
    私を汚すな
    私たちの授業ではMVC思想に基づく開発アーキテクチャがよく言われているので,コードをcontroller,Service,Daoなどの異なる階層に分け,Dao層では異常な方法を投げ出すことが多い[ , SQL ],いずれも来者:Dao層コード:
    public User load(Integer user_id) throw SQLException {
    //   ID      ,        
    }

    もしコードがこのように書かれていたら、何の問題もなく、正しいと言えるが、規範に合わない!設計結合の観点からよく考えると,ここでのSQLExceptionは上位呼び出しコードに汚染され,呼び出し層は明示的に try-catch または を必要とする. によれば、次のように適切に変更できます.
     public User load(Integer user_id) {
          try{
                 //   ID      
          }catch(SQLException e){
              //             ,      
             throw new RuntimeException(SQLErrorCode, e);
          }finally{
                 //    ,    
          }
     }

    私の気持ちを気にしないで
    学生開発では、私が手間を省くためによく言った言葉は、あなたが異常を[印刷]コンソールに出力することだと言ってもいいが、実は何の意味もない. | | :
    このような処理は面白くありません.プログラムの実行を中断していないので、コードを呼び出し続け、より多くの異常を引き起こします.
    このようなコードを書いたことがあるかどうか考えてみましょう.
     public void update(User user){
        try{
            //..some code that throws SQLException
         }catch(SQLException ex){
          /**
            *       ,           ,              。
            *    Production[  ]    ,            。
            *      catch           ,         
            * */
    
          ex.printStacktrace();
         }
     }

    コード再構築
     public void update(User user){
      try{
         //..some code that throws SQLException
      }
      catch(SQLException ex){
         //         
         throw new RuntimeException(“       ,  com.pangsir.user.dao.UserDao.update       ”, ex);
      }
      finally{
         //    
      }
     }

    この誤りは基本的で、一般的にはこの>低級な誤り<.
    地主の家にも食糧が残っていない
    次のコードに問題がありますか?
     //           
     List userList = this.userDao.listAll();//
     for(int i=0; i

    授業中に異常処理がシステム資源を占有していることを知った.これを単独でプレゼンテーションの例と見なさないで、私たちの設計の中で制御層->Services->Dao層から
    別の角度から言えば、クラスAではループが実行され、ループではBクラスのメソッドが呼び出され、Bクラスで呼び出されたメソッドにはtry-catchのような文ブロックが含まれている.クラスの階層を消去し、コードは上と同じです. , ! , , !