RuntimeException
日本語 | 実行時例外 |
英語 | runtime exception |
ふりがな | らんたいむえくせぷしょん |
フリガナ | ランタイムエクセプション |
J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名はjava.lang.RuntimeException。
例外の一種。多くの例外のスーパークラスでもあり、基本的にこの例外を直接使用することはない。
他の例外と大きく異なる性質を持っており、J2SEの仕様上、RuntimeExceptionクラス及びそのサブクラスは「catch、throws指定の必要がない」という特権が与えられている。
通常の例外は、catchするかthrows指定してメソッドの外で処理してもらう、といった例外処理が必要であり、そうしなければコンパイルエラーとなる。だが、RuntimeExceptionクラス及びそのサブクラスは、その必要がない特殊な例外である。
RuntimeExceptionクラスのサブクラスにはNullPointerExceptionクラスやClassCastExceptionクラスといった、通常throwやthrowsでは投げられない、どこででも発生しうる例外が含まれている。
RuntimeExceptionクラスにこの特権が与えられている理由は、この例外がどこででも発生しうるものであり、その全箇所で例外処理を行うのは現実的ではなく、また、プログラムのロジック上「その例外は発生しない」ことが完全に証明できていれば例外処理の必要がないためである。
逆に言うと、もしRuntimeExceptionクラスのサブクラスとして例外クラスを宣言する場合には、上記の条件を満たしている必要がある。条件によっては例外が発生する可能性がある場合や、明示的に例外を処理すべき場面ではRuntimeExceptionクラスのサブクラスではなくExceptionクラスのサブクラスとして例外を宣言すべきである。決して「例外処理めんどくせー」という理由でRuntimeExceptionクラスのサブクラスにしてはならない。
例外の一種。多くの例外のスーパークラスでもあり、基本的にこの例外を直接使用することはない。
他の例外と大きく異なる性質を持っており、J2SEの仕様上、RuntimeExceptionクラス及びそのサブクラスは「catch、throws指定の必要がない」という特権が与えられている。
通常の例外は、catchするかthrows指定してメソッドの外で処理してもらう、といった例外処理が必要であり、そうしなければコンパイルエラーとなる。だが、RuntimeExceptionクラス及びそのサブクラスは、その必要がない特殊な例外である。
RuntimeExceptionクラスのサブクラスにはNullPointerExceptionクラスやClassCastExceptionクラスといった、通常throwやthrowsでは投げられない、どこででも発生しうる例外が含まれている。
RuntimeExceptionクラスにこの特権が与えられている理由は、この例外がどこででも発生しうるものであり、その全箇所で例外処理を行うのは現実的ではなく、また、プログラムのロジック上「その例外は発生しない」ことが完全に証明できていれば例外処理の必要がないためである。
逆に言うと、もしRuntimeExceptionクラスのサブクラスとして例外クラスを宣言する場合には、上記の条件を満たしている必要がある。条件によっては例外が発生する可能性がある場合や、明示的に例外を処理すべき場面ではRuntimeExceptionクラスのサブクラスではなくExceptionクラスのサブクラスとして例外を宣言すべきである。決して「例外処理めんどくせー」という理由でRuntimeExceptionクラスのサブクラスにしてはならない。
参考サイト
// Sample.java
public class Sample
{
public static void main( String[] args )
{
try
{
// RuntimeExceptionを投げます。
throw new RuntimeException();
}
catch( RuntimeException e )
{
// 投げられたRuntimeExceptionを拾いました。
e.printStackTrace();
// java.lang.RuntimeException
// at Sample.main(Sample.java:9)
}
// RuntimeExceptionはcatchしなくても
// コンパイルエラーになりません。
throw new RuntimeException();
}
}
public class Sample
{
public static void main( String[] args )
{
try
{
// RuntimeExceptionを投げます。
throw new RuntimeException();
}
catch( RuntimeException e )
{
// 投げられたRuntimeExceptionを拾いました。
e.printStackTrace();
// java.lang.RuntimeException
// at Sample.main(Sample.java:9)
}
// RuntimeExceptionはcatchしなくても
// コンパイルエラーになりません。
throw new RuntimeException();
}
}
// Sample.java public class Sample { public static void main( String[] args ) { try { // RuntimeExceptionを投げます。 throw new RuntimeException(); } catch( RuntimeException e ) { // 投げられたRuntimeExceptionを拾いました。 e.printStackTrace(); // java.lang.RuntimeException // at Sample.main(Sample.java:9) } // RuntimeExceptionはcatchしなくても // コンパイルエラーになりません。 throw new RuntimeException(); } }