!!!SJC-P 例外 ::次のいずれかがスローされる結果になる状況を認識できる。 *[ArrayIndexOutOfBoundsException|http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/ArrayIndexOutOfBoundsException.html] *[ClassCastException|http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/ClassCastException.html] *[IllegalArgumentException|http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/IllegalArgumentException.html] *[IllegalStateException|http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/IllegalStateException.html] *[NullPointerException|http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/NullPointerException.html] *[NumberFormatException|http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/NumberFormatException.html] *[AssertionError|http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/AssertionError.html] *[ExceptionInInitializerError|http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/ExceptionInInitializerError.html] *[StackOverflowError|http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/StackOverflowError.html] *[NoClassDefFoundError|http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/NoClassDefFoundError.html] これらのうちのどれが仮想マシンでスローされるかを知っており、その他については、プログラムでスローすべき状況を認識できる。 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(); } } ---- {{amazon 4822282775}} ---- {{include_html banner_html, "!SJC-P"}}