【Java】try--catch文の理解と運用例

3439 ワード

さぎょう
Javaでは通常try catch文を使用して例外をキャプチャし、処理します.
try
{
         ;
}
catch(      e)
{
         ;
}

異常を引き起こす可能性のある文をtry文ブロックにカプセル化し、catch文で発生する可能性のある異常をキャプチャします.try文ブロックに異常が発生すると、対応する異常オブジェクトが投げ出され、catch文は投げ出された異常オブジェクトのタイプに基づいてキャプチャされ、処理されます.処理後、プログラムはtry文ブロックの残りの文をスキップし、catch文ブロックの後ろの最初の文に移動して実行を開始します.try文ブロックに異常が発生しない場合、tryブロックは正常に終了し、後のcatch文ブロックがスキップされ、プログラムはcatch文ブロックの後の最初の文から実行されます.以上の構文の処理コードブロック1では、以下の3つの方法で対応する異常情報を出力することができる.
  • printStackTrace()メソッド:例外のタイプ、性質、スタック階層、およびプログラムに表示される場所を指定します.
  • getMessage()メソッド:出力エラーの性質.
  • toString()メソッド:異常なタイプと性質を与えます.

  • 注:catch文のパラメータは、例外タイプと例外オブジェクトを含むメソッドの宣言と似ています.例外タイプはThrowableクラスのサブクラスでなければなりません.catch文が処理できる例外タイプを示し、例外オブジェクトは実行時システムによってtry文ブロックで生成され、キャプチャされます.
    学生の名前、年齢、性別を入力するプログラムを作成し、年齢が数字でないときの異常を捕まえることを要求します.ここではtry catch文を使用して実装します.具体的なコードは次のとおりです.
    import java.util.Scanner;
    public class Test02
    {
        public static void main(String[] args)
        {
            Scanner scanner=new Scanner(System.in);
            System.out.println("      ");
            String name="";    //      
            int age=0;         //      ,     ,    
            String sex="";     //      
            try
            {
                System.out.println("       :");
                name=scanner.next();//     
                System.out.println("       :");
                age=scanner.nextInt();
                System.out.println("       :");
                sex=scanner.next();
            }
            catch(Exception e)//    
            {
                e.printStackTrace();
                System.out.println("    !");//    
            }
            System.out.println("  :"+name);
            System.out.println("  :"+age);
        }
    }

    上記のコードはmain()メソッドでtry catch文を使用して異常をキャプチャし、異常が発生する可能性のある「age=scanner.nextlnt();コードはtryブロックに格納され、catch文で取得された例外タイプがExceptionであることを指定し、例外オブジェクトのprintStackTrace()メソッドを呼び出して例外情報を出力します.運転結果は以下の通りです.
          
           :
       
           :
    120a
    java.util.InputMismatchException
        at java.util.Scanner.throwFor(Unknown Source)
        at java.util.Scanner.next(Unknown Source)
        at java.util.Scanner.nextInt(Unknown Source)
        at java.util.Scanner.nextInt(Unknown Source)
    
        !
      :   
      :0
        at text.text.main(text.java:19)

    もう1つの例では、num 1を21に設定し、num 2をaに設定すると、try--catch文がキャプチャされます.
    
    
    /**
     *      
     */
    public class Caculate1 {
        public static void main(String[] args) {//String[] args        
            try {
    //                     
                String num1 = args[0];
                String num2 = args[1];
                int n1 = Integer.parseInt(num1);//        
                int n2 = Integer.parseInt(num2);
    
                System.out.println((double) n1 / n2);
    //                  
            }catch (Exception e) {//ArrayIndexOutOfBoundsException    
    //object       ,Throwable      ( Error: Ru),Exception:。。。。Exception RuntimeException 
                //            System.out.println();
                e.printStackTrace();//      
            }
        }
    }

    結果は次のとおりです.
    java.lang.NumberFormatException: For input string: "a"
    	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    	at java.lang.Integer.parseInt(Integer.java:580)
    	at java.lang.Integer.parseInt(Integer.java:615)
    	at edu.xalead.Caculate1.main(Caculate1.java:13)
    
    Process finished with exit code 0

    これがtry--catch文のキャプチャ機能です.