- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
!!!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"}}