トップ 差分 一覧 ping ソース 検索 ヘルプ PDF RSS ログイン

SJC-P 例外



目次



記事一覧

キーワード

SJC-P 例外

次のいずれかがスローされる結果になる状況を認識できる。

これらのうちのどれが仮想マシンでスローされるかを知っており、その他については、プログラムでスローすべき状況を認識できる。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ExceptionTest {
    
    public static void main(String[] args) {
        /* 
         * ArrayIndexOutOfBoundsException 
         * 不正なインデックスを使って配列がアクセスされた 
         * インデックスが負または、配列のサイズ以上
         */
        try {
            int[] ary = {1,2,3,5};
            System.out.println(ary[-1]);
        } catch (ArrayIndexOutOfBoundsException e) {
            e.printStackTrace();
        }
        
        /*
         * ClassCastException
         * オブジェクトを継承関係にないクラスにキャストしようとした
         */
        try {
            Object o = new Integer(10);
            String s = (String)o;
        } catch (ClassCastException e) {
            e.printStackTrace();
        }
        
        /*
         * IllegalArgumentException
         * 不正な引数、または不適切な引数をメソッドに渡した
         */
        try {
            String key = "";
            System.out.println(System.getProperty(key));
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        }
        
        /*
         * IllegalStateException
         * 不正または不適切なときにメソッドが呼び出された
         */
        try {
            Pattern p = Pattern.compile("[a-z]");
            Matcher m = p.matcher("012345abcde");
            // m.find();
            System.out.println(m.start());
            
        } catch (IllegalStateException e) {
            // マッチが行われていない、または前回のマッチ操作が失敗
            e.printStackTrace();
        }
        /*
         * NullPointerException
         * null オブジェクトのインスタンスメソッドの呼び出し
         * null オブジェクトのフィールドに対するアクセスまたは変更
         * null の長さを配列であるかのように取得
         * null のスロットを配列であるかのようにアクセスまたは修正
         * null を Throwable 値であるかのようにスロー   
         */
        try {
            Exception e = null;
            throw e;
        } catch (NullPointerException npe) {
            npe.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }

        /*
         * NumberFormatException
         * 文字列を数値型に変換しようとしたとき、文字列の形式が正しくない
         */
        try {
            int i = Integer.parseInt("abc");
        } catch (NumberFormatException e) {
            e.printStackTrace();
        }

        /*
         * ExceptionInInitializerError
         * static 初期化子で予想外の例外が発生したことを通知
         */
        try {
            ExceptionInInitializerTest t = new ExceptionInInitializerTest();
        } catch (ExceptionInInitializerError e) {
            e.printStackTrace();
        }
        /*
         * StackOverflowError
         * アプリケーションでの再帰の回数が多すぎてスタックオーバーフローが起こる場合にスロー
         */
        try {
            StackOverFlowTest t = new StackOverFlowTest();
            t.funcA();
        } catch (StackOverflowError e) {
            e.printStackTrace();
        }
    }
}
class ExceptionInInitializerTest {
    static {
        int i = Integer.parseInt("abc");
    }
}
class StackOverFlowTest {
    public void funcA() { funcA(); }
}



指定されたパートは存在しません。



YAGI Hiroto (piroto@a-net.email.ne.jp)
twitter http://twitter.com/pppiroto

Copyright© 矢木 浩人 All Rights Reserved.