Javaベースの復習2日目(異常処理)

13418 ワード

一、よくある異常タイプ:
public class TestException {

    

    public static void main(String[] args) {

        

        int i = 10;

        // : java.lang.ArithmeticException

        int j = i / 0;

        System.out.println(j); 

    

        int [] scores = new int[]{1, 2, 4, 5};

        // : java.lang.ArrayIndexOutOfBoundsException

        System.out.println(scores[4]); 

        

        Person p1 = new Man();

        // : java.lang.ClassCastException

        Woman p2 = (Woman) p1;

        

        p1 = null;

        // : java.lang.NullPointerException

        System.out.println(p1.toString()); 

        

        System.out.println("end...");

    }    

}



class Person{

    

}



class Man extends Person{

    

}



class Woman extends Person{

    

}

二、try、catchコードブロックに異常イベントが発生したかどうかにかかわらず、finallyブロックの文は実行される.
import java.io.FileNotFoundException;

import java.io.InputStream;



public class TestTryCatchFinally {

    

    public static void main(String[] args) {

        

        try {

            int i = 10;

            int j = i / 0;

        } finally{

             System.out.println("finally...");

         }

        

        // try、catch ,finally 。        

        System.out.println("end...");

        

        // , IO  .       

        try {

            InputStream is = new FileInputStream("abc.txt");

        } catch (FileNotFoundException e) {

            e.printStackTrace();

        }

    }  

}

三、throws:
 1. Javaでthrowsキーワード宣言を使用して例外を放出する. 2. throwsメソッドが投げ出す異常は、メソッドに現れる異常のタイプまたはその親タイプであってもよい. 3. throwsは、複数の異常を放出する、複数の異常を使用する、分割することを宣言することができる. 4. 実行時異常はthrowsキーワードを用いて明示的に投げ出す必要はない. 5. 書き換え方法は、書き換え方法よりも広い範囲の異常タイプを投げ出すことができない.
import java.io.FileNotFoundException;

import java.io.IOException;



public class TestThrows {



    public static void main(String[] args) {

        try {

            test();

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

 

    public static void test(){ 

        

        int i = 10 / 0;

        System.out.println(i);

         

//        InputStream fs = new FileInputStream("abc.txt"); 

        

//        Connection connection = null;

//        String sql = null;

//        PreparedStatement ps = connection.prepareStatement(sql);

        

//        byte [] buffer = new byte[fs.available()];

//        fs.read(buffer);

        

        A a = new B();

        try {

            a.method();

        } catch (FileNotFoundException e) {

            e.printStackTrace();

        }       

    }    

}



class A{

    void method () throws FileNotFoundException{        

    }

}



class B extends A{

//    @Override

//    void method() throws IOException {

//    }

}

四:throw:
手動による例外放出:1.例外クラスオブジェクト2を作成します.メソッド内部でthrowキーワードを使用してこの異常クラスオブジェクトを投げ出します!カスタム例外クラス:1.通常はRuntimeExceptionから継承する(Exceptionを継承できる).カスタムの例外クラスは、人工的に投げ出されるために使用されます!
import java.util.Scanner;



public class TestThrow {



    public static void main(String[] args) {

        try {

            inputAge();

        } catch (Exception e) {

            System.out.println(e.getMessage()); 

        }      

        System.out.println("end...");

    }

    

    /**

     *  :   15-30  ,   30  

     */

    public static void inputAge(){

        Scanner sc = new Scanner(System.in);       

        System.out.print("age=");

        int age = sc.nextInt();

        

        if(age > 30){

//          System.out.println(" .");

            throw new AgeTooLargeException(" .");

        }

    }



    public static void test(){

        

        //1.  

        RuntimeException ex = new RuntimeException();

        

        //2.  

        throw ex;

    }   

}

五、カスタム例外例:
1、例外クラスを定義します.
public class EcDef extends RuntimeException{



    public EcDef() {

        // TODO Auto-generated constructor stub

    }

    

    public EcDef(String msg) {

        super(msg);

    }



}

2、例外を処理するクラスをもう一つ作成する:
public class EcmDef {



    public static void main(String[] args) {

        

        try {

            int i = Integer.parseInt(args[0]); // "a"

            int j = Integer.parseInt(args[1]);

            

            System.out.println(ecm(i, j));

        } catch (ArrayIndexOutOfBoundsException e) {

            System.out.println(" .");

        } catch (ArithmeticException e) {

            System.out.println("  0");

        } catch (EcDef e) {

            System.out.println(e.getMessage()); 

        } catch (NumberFormatException e) {

            System.out.println(" .");

        }

    }

    

    public static int ecm(int i, int j){

        

        if(i < 0 || j < 0){

            throw new EcDef(" . ");

        }

        

        int result = i / j;

        return result;

    }

}