Learning Life

7770 ワード

Javaの日常を学ぶ
日付:2019-8-13 day 4学習目的:学習使用異常類
異常
1.1異常概念
異常とは、異常という意味です.生活の中で:医者は、あなたの体のある部位に異常があって、この部位は正常と比較して少し異なって、この部位の機能は影響を受けますと言いました.プログラムの意味は次のとおりです.
  • 異常:プログラムの実行中に異常が発生し、最終的にJVMの異常停止を引き起こすことを指す.

  • Javaなどのオブジェクト向けプログラミング言語では、例外自体がクラスであり、例外が発生すると例外オブジェクトが作成され、例外オブジェクトが投げ出されます.Javaが例外を処理する方法は割り込み処理である.
    異常とは文法の間違いではなく、文法が間違っていて、コンパイルが通らず、バイトコードファイルが発生せず、実行できないことを指す.
    1.2異常システム
    異常メカニズムは、プログラムの問題を見つけるのに役立ちます.異常のルートクラスはjava.lang.Throwableで、その下には2つのサブクラスがあります.java.lang.Errorjava.lang.Exceptionで、通常はjava.lang.Exceptionを指します.
    [外部リンク画像の転送失敗(img-kp 40 GXxV-1565685064024)(img異常系.png)]
    Throwableシステム:
  • Error:重大なエラーError.
  • Exception:異常を表し、異常発生後のプログラマはコードで訂正し、プログラムを継続させることができ、処理しなければならない.Throwableの一般的な方法:
  • public void printStackTrace():異常の詳細を印刷します.例外のタイプ、例外の原因、例外が発生した場所も含まれており、開発とデバッグの段階でprintStackTraceを使用する必要があります.
  • public String getMessage():異常の原因を取得します.ユーザーに提示すると、エラーの原因が提示されます.
  • public String toString():例外のタイプと例外記述情報を取得します(いいえ).

  • 異常が発生したら、緊張しないで、異常の簡単なクラス名を、APIにコピーして調べます.
    1.3異常分類
    私たちが普段言っている異常とはExceptionのことです.このような異常が発生すると、コードを修正し、プログラムを修復しなければならないからです.
    異常(Exception)の分類:コンパイル時と実行時のどちらによって異常をチェックしますか?
  • コンパイル期間異常:checked異常.コンパイル時にチェックされ、例外が処理されていない場合はコンパイルに失敗します.(日付フォーマット異常など)
  • 運転時期異常:runtime異常.運転時期に異常を点検する.コンパイル時に、実行異常はコンパイラ検出されません(エラーは報告されません).(数学的異常など)
  • [外部チェーンピクチャの転送失敗(img-ezpquCFx-1565685064025)(img異常の分類.png)]
    1.4異常の発生過程の解析
    1.5異常の三つの問題
    ​ 1.どこか異常
    ​ 2.誰が異常を処理しますか?
    ​ 3.異常の処理方法
    第二章異常の処理
    Java例外処理の5つのキーワード:try、catch、finally、throw、throws
    2.1異常放出throw
    プログラムを作成するときは、プログラムに問題がある場合を考慮しなければなりません.たとえば、メソッドを定義する場合、メソッドはパラメータを受け入れる必要があります.では、呼び出し方法で受信したパラメータを使用する場合は、まずパラメータデータを合法的に判断する必要があり、データが合法的でない場合は、呼び出し者に合法的なデータを伝達するように伝えるべきである.この場合,異常を投げ出す方式を用いて呼び出し者に伝える必要がある.
    Javaでは、指定した例外オブジェクトを放出するためのthrowキーワードが提供されます.では、異常を投げ出すには具体的にどのように操作しますか?
  • 例外オブジェクトを作成します.いくつかのヒント情報をカプセル化します(情報は自分で書くことができます).
  • は、この異常オブジェクトを呼び出し者に通知する必要がある.どうやって知らせますか?この異常オブジェクトを呼び出し元に渡すにはどうすればいいですか?キーワードthrowでできます.throw異常オブジェクト.throwはメソッド内で使用され、例外オブジェクトを放出し、この例外オブジェクトを呼び出し元に渡し、現在のメソッドの実行を終了します.

  • フォーマットの使用:
    throw new     (  );
    

    例:
    throw new NullPointerException("    arr     ");
    
    throw new ArrayIndexOutOfBoundsException("          ,     ");
    

    2.3異常を宣言するthrows
    例外の宣言:問題を識別し、呼び出し者に報告します.メソッド内でthrowによってコンパイル時の異常が投げ出され、キャプチャ処理が行われない場合(後述する)、throwsによって宣言され、呼び出し者に処理させる必要があります.
    キーワードthrowsは、現在のメソッドが異常を処理するのではなく、そのメソッドの呼び出し者に異常(放出異常)を処理するように注意する方法宣言に用いる.
    例外フォーマットの宣言:
                 (  ) throws     1,    2…{   }	
    

    2.4異常をキャプチャするtry...catch
    異常が発生すると、すぐにプログラムが終了するので、異常を処理しなければなりません.
  • この方法は処理されず、投げ出され、この方法の呼び出し者によって処理されると宣言する(throws).
  • メソッドではtry-catchの文ブロックを使用して例外を処理します.

  • try-catchの方法は異常をキャプチャすることです.
  • 異常をキャプチャする:Javaでは異常に対して的確な文をキャプチャし、発生した異常に対して指定方式の処理を行うことができる.

  • 取得例外構文は次のとおりです.
    try{
                     
    }catch(      e){
                
         //    /      /      
    }
    

    **try:**このコードブロックに異常が発生する可能性のあるコードを記述します.
    **catch:**ある異常の捕獲を行い、捕獲した異常の処理を実現する.
    注意:tryもcatchも単独では使用できません.連用する必要があります.
    例外情報の取得方法:
    Throwableクラスでは、いくつかの表示方法が定義されています.
  • public String getMessage():異常な記述情報を取得し、原因(ユーザに提示するとエラー原因が提示される.
  • public String toString():例外のタイプと例外記述情報を取得します(いいえ).
  • public void printStackTrace():異常なトラッキングスタック情報を印刷し、コンソールに出力します.

  • 例外のタイプ、例外の原因、例外が発生した場所も含まれており、開発とデバッグの段階でprintStackTraceを使用する必要があります.
    2.4 finallyコードブロック
    finally:異常が発生するかどうかにかかわらず、実行する必要がある特定のコードがあります.また、例外によりプログラムがジャンプし、実行できない文もあります.finallyはこの問題を解決し、finallyコードブロックに格納されているコードは必ず実行されます.
    いつのコードが最終的に実行されなければなりませんか?
    try文ブロックで物理リソース(ディスクファイル/ネットワーク接続/データベース接続など)をいくつか開くと、使用が完了した後、最終的に開いているリソースを閉じなければなりません.
    finallyの構文:
    try...catch...finally:自身は異常を処理する必要があり、最終的にはリソースを閉じる必要があります.
    注意:finallyは単独では使用できません.
    2.5異常注意事項
  • 複数の異常使用キャプチャはどのように処理されますか?
  • 複数の異常をそれぞれ処理する.try{}catch{} try{}catch{} try{}catch{}
  • 複数の異常を一度にキャプチャし、複数回処理する.try{} carch(){} catch{}
  • 複数の異常は、一度に1回の処理をキャプチャする.

  • 一般的には、
    try{
                     
    }catch(    A  e){   try   A    ,   catch   .
                
         //    /      /      
    }catch(    B  e){   try   B    ,   catch   .
                
         //    /      /      
    }
    
    のフォーマットで1回のキャプチャ複数回の処理を使用します.
    注意:このような異常処理方式では、複数のcatchの異常が同じではなく、catchの複数の異常の間に子親異常の関係がある場合、子異常は上のcatch処理、親異常は下のcatch処理を要求する.
  • 運転時に異常が投げ出された場合は処理しなくてもよい.捕獲も放出も宣言しない.
  • finallyにreturn文がある場合、finallyの結果を永遠に返し、それを回避する.

  • 親が複数の例外を投げ出した場合、子が親メソッドを書き換える場合、親と同じ例外または親例外の子を投げ出すか、例外を投げ出さない.
  • 親メソッドは例外を放出していません.子メソッドは親メソッドを書き換える場合も例外を放出してはいけません.このときサブクラスで発生するこの異常は,捕獲処理のみであり,
  • の放出は宣言できない.
    第三章カスタム例外
    3.1概要
    なぜカスタム例外クラスが必要なのか
    JAvaには多くの例外クラスがありますが、実際の開発ではSunが定義していない例外がありますので、開発ニーズを満たすために例外をカスタマイズします.例えば、権限の問題、ログインの問題などです.
    カスタム例外とは
    開発中、自分のビジネスニーズに応じて書かれた例外クラスをカスタム例外と呼ぶ
    例外クラスの定義
    Exceptionクラスの継承(コンパイル期間異常)、RuntimeException(実行期間異常)
    public class RegisterException extends Exception {
        public RegisterException() {}
        public RegisterException(String message){
            super(message);
        }
    }
    

    例外クラスの使用方法
    public class Demo5 {
        private static String[] names = {"Tony", "Ned", "Robbert", "John"};
        public static void main(String[] args) {
            try{
                checkUserName("Tony");
                System.out.println("    ");
            }catch (RegisterException e) {
                e.printStackTrace();
            }
    
        }
    
        private static void checkUserName(String s) throws RegisterException {
            for (String name : names ) {
                if(s.equals(name)){
                    throw new RegisterException("       ");
                }
            }
    
        }
    }