Java OPP異常

29032 ワード

Java OPP異常
一、異常
1、異常の基本概念
異常は生活の中で随所で発生することができて、生活の中の出勤は車で家に帰って、途中で渋滞して、これは異常で、異常はプログラムの運行の過程の中で間違いが発生します
2、try-catchブロック
import java.util.*;
public class Test3 {
     
	public static void main(String[] args) {
     
		Scanner in = new Scanner(System.in);
		System.out.print("      :");
		try {
     
			int num1 = in.nextInt();
			System.out.print("     :");
			int num2 = in.nextInt();
			System.out.println(String.format("%d / %d = %d", num1,num2,num1/num2));
			System.out.println("       ");
		} catch (Exception e) {
     
			System.err.println("    :           ,"+"      。");
			e.printStackTrace();
		}
	}
}

ここでは3つの状況があります.
  • try文ブロックの文は正常に実行され、異常は発生せず、catchブロックの文は実行されません.
  • try文ブロックは実行中に例外に遭遇し、対応するcatchで宣言された例外マッチングは、tryの残りのコードが無視され、catchブロックの文が実行されます.
  • try文ブロックが実行中に例外に遭遇し、対応するcatchで宣言された例外が一致しない場合、プログラムはすぐに開始されます.異常は次のとおりです:
  • 異常
    説明
    Exception
    例外階層のルートクラス
    ArithmeticException
    算術エラーの場合、ゼロを除数とする
    ArrayIndexOutOfBoundsException
    配列の下付き境界
    NullPointerException
    nullオブジェクトメンバーへのアクセスを試みる
    ClassNotFoundException
    必要なクラスをロードできません
    InputMismatchException
    取得するデータ型が実際に入力したタイプと一致しません
    IllegalArgumentException
    オブジェクト強制タイプ変換エラー
    ClassCastException
    オブジェクト強制タイプ変換エラー
    NumberFormatException
    デジタルフォーマット変換異常、例えば「abc」をデジタルに変換
    3、try-chtch-finallyブロック
    public class Test4 {
         
    	public static void main(String[] args) {
         
    		Scanner in = new Scanner(System.in);
    		System.out.print("      :");
    		try {
         
    			int num1 = in.nextInt();
    			System.out.print("     :");
    			int num2 = in.nextInt();
    			System.out.println(String.format("%d / %d = %d", num1,num2,num1/num2));
    		} catch (Exception e) {
         
    			System.err.println("    :           ,"+"      。");
    			System.out.println(e.getMessage());
    		}finally {
         
    		System.out.println("       ");
    		}
    	}
    }
    

    ここには二つの状況がある.
  • tryブロックのすべての文が実行され、finallyが実行されます.
  • tryは、catchブロックがキャプチャされたかどうかにかかわらず、finallyが実行する異常に遭遇した.

  • 3、多重catch
    import java.util.Scanner;
    import java.util.InputMismatchException;//     MismatchException   
    public class Test7 {
         
    	public static void main(String[] args) {
         
    		Scanner in = new Scanner(System.in);
    		System.out.print("      :");
    		try {
         
    			int num1 = in.nextInt();
    			System.out.print("     :");
    			int num2 = in.nextInt();
    			System.out.println(String.format("%d / %d = %d", num1,num2,num1/num2));
    		} catch (InputMismatchException e) {
         
    			System.err.println("           。");
    		}catch(ArithmeticException e) {
         
    			System.err.println("      。");
    		}catch(Exception ex){
         
    			System.err.println("      。");
    		}finally {
         
    			System.out.println("       !");
    		}
    	}
    }
    
    

    複数のcatchブロックは、すべてのExceptionがExceptionクラスから始まるため、サブクラスから親クラスに移行する必要があります.
    親を前に置くと、後ろのexceptionは実行されません.
    4、異常を宣言-throws
  • try-catchにより異常
  • をキャプチャ処理する
  • throwsを介して例外を宣言し続けます.呼び出し元が例外を処理するつもりがない場合は、throwsで例外を宣言し続け、上記のレベルの呼び出し元が例外を処理します.main()メソッドが宣言する例外はJava仮想マシンによって決まります.
  • public class Test8 {
         
    	public static void main(String[] args) {
         
    		try {
         
    			divide();
    		} catch (Exception e) {
         
    			System.out.println("    :           ,"+"      ");
    			e.printStackTrace();
    		}
    	}
    	public static void divide() throws Exception {
         
    		Scanner in = new Scanner(System.in);
    		System.out.print("      :");
    		int num1 = in.nextInt();
    		System.out.print("     ");
    		int num2 = in.nextInt();
    		System.out.println(String.format("%d / %d = %d", num1,num2,num1/num2));
    	}
    }
    

    5、異常放出-throw
    public class Person {
         
    	private String name = "";
    	private int age = 0;
    	private String sex = " ";
    	
    	public void setSex(String sex) throws Exception{
         
    		if (" ".equals(sex)||" ".equals(sex)) {
         
    			this.sex = sex;
    		}else {
         
    			throw new Exception("     \" \"  \" \"!");
    		}
    	}
    	public void print() {
         
    		System.out.println(this.name+"("+this.sex+","+this.age+" )");
    	}
    }
    
    import org.apache.log4j.Logger;
    public class Test9 {
         
    	private static Logger logger = Logger.getLogger(Test11.class.getName());
    	public static void main(String[] args) {
         
    		Person person = new Person();
    		try {
         
    			person.setSex("Male");
    			person.print();
    		} catch (Exception e) {
         
    			logger.error("           ",e);
    			e.printStackTrace();
    		}
    	}
    }
    

    Throwとthrowsの違いは次の3つです.
  • の役割は異なります.throwはプログラム内の放出異常に使用されます.throwsは、この方法内で異常を放出することを宣言するために使用される
  • .
  • 使用位置が異なる:throwは方法体内で、単独の文を作る.throwsはメソッドパラメータリストの後に付いて単独で使用できない必要があります.
  • 内容は異なります:throwは1つの異常オブジェクトを投げ出して、しかも1つしかありません;throwsの後ろには異常クラスがあり、複数の異常クラス
  • があります.
    6、異常の分類
    Javaの例外アーキテクチャには、継承関係がある多くの例外クラスが含まれています.
  • Throwableクラス:すべての例外タイプはThrowableクラスのサブクラス、すなわちErrorとExceptionです.
  • Errorクラス:プログラム自体だけでは回復できない重大なエラーを示します.したがって、プログラム設計を行う際には、Exception
  • にもっと注目すべきである.
  • Exceptionクラス:Javaアプリケーションによって投げ出され、処理される非重大なエラー.必要なファイルが見つからない、ネットワーク接続が不通または中断された、算術演算エラー(ゼロで除算されるなど)、配列の下限.
  • Checked異常(非運転時異常)は、運転時異常以外のExcptionによって継承された異常クラスです.

  • 7、ログ記録ツールlog 4 j
    MyEclipscでlog 4 jを使用するには:
  • プロジェクトにlog 4 jで使用するJARファイル
  • を加える
  • log 4 jを作成する.prpoertiesファイル
  • はlog 4 jを記述する.prpoertiesファイル、構成ログ情報
  • プログラムにおいてlogjを用いてログ情報
  • を記録する.
    7.1ログと分類
    ログは記録内容によって、主に以下の3種類に分けられます.
  • SQLログ:記録システムが実行するSQL文
  • 異常ログ:システム運転中に発生した異常イベントを記録する
  • 業務ログ:ユーザー登録、操作記録
  • などのシステム実行プロセスを記録する.
    7.2 log 4 jプロファイル
    出力レベルと名前付け
    log4j.rootLogger = debug ,stdout
    debugはログレコーダの出力レベルを指します.
  • fatal:重大なエラーイベントがアプリケーションの終了
  • をもたらすことを示す.
  • error:エラーイベントが発生したにもかかわらず、システムの継続運転に影響を及ぼさないことを示す
  • warn:潜在的なエラーが発生することを示す
  • info:太い引張りレベルでメッセージを指定し、アプリケーションの実行プロセスを強調します.
  • debug:微粒子イメージイベントを指摘し、デバッグアプリケーションに非常に役立つ
  • レベル:
    fatal>error>warn>info>debug
    ###   Logger            ###
    log4j.rootLogger=debug, stdout,logfile
    
    ###              ###
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Target=System.err
    log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
    
    ###           :jbit.log ###
    log4j.appender.logfile=org.apache.log4j.FileAppender
    log4j.appender.logfile.File=jbit.log
    log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
    log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}%l %F %p %m%n
    

    ConsoleAppender:ログイベントをコンソールに出力します.Target属性構成によりSystemに出力.システムまたはシステムErrのデフォルトのターゲットはSystemです.out
    FileAppender:ログイベントをファイルに出力します.Fileプロパティによるプロファイルのパスと名前
    SimpleLayout:ログ出力を非常に簡単にフォーマットします.レベルレベルレベルレベルを出力し、ダッシュ「-」に従ってログメッセージを出力します.
    PatternLayout:指定された変換モードに従ってログ出力をフォーマットし、多様な出力フォーマットをサポートします.構成が必要だConversionPatternプロパティは、このプロパティが構成されていない場合はデフォルトの変換モードを使用します.