Java-例外処理
例外処理とは
アプリケーションエラー発生時のプログラム対処です。
例外処理の実装
try-catchでエラー発生時の処理を記述します。
class MyClass{
public static void main (String[] args) {
try {
// 例外が発生する可能性のあるブロック
}catch(例外の種類1 param1){
// 例外の種類1が発生した場合に実行される部分
}catch(例外の種類2 param1){
// 例外の種類2が発生した場合に実行される部分
}finally{
// 例外が起きても起きなくても実行される部分
}
}
}
例外の種類
ClassNotFoundException | 呼び出そうとしたクラスのクラスファイルが無かった場合 |
CloneNotSupportedException | オブジェクトを複製するために Object クラスの clone メソッドが呼び出されたが、そのオブジェクトのクラスが Cloneable インタフェースを実装していないことを示すためにスローされます。 |
DataFormatException | データ形式エラーが発生したことを通知します。 |
IOException | なんらかの入出力例外の発生を通知するシグナルを発生させます。サブクラスとしてEOFException, FileNotFoundExceptionなどがあります |
PrinterException | 印刷システムに例外的な状態が発生したことを示すために使用されます。サブクラスとしてPrinterAbortException, PrinterIOExceptionがあります。 |
RuntimeException | JVMの通常の処理でスローすることができる各種の例外のスーパークラスです。 |
ArithmeticException | RuntimeExceptionのサブクラスです。算術計算で例外的条件が発生した場合にスローされます。たとえば、「ゼロで除算される」整数はこのクラスのインスタンスをスローします。 |
ArrayStoreException | RuntimeExceptionのサブクラスです。不正な型のオブジェクトをオブジェクトの配列に格納しようとしたことを示すためにスローされます。 |
ClassCastException | RuntimeExceptionのサブクラスです。あるオブジェクトを継承関係にないクラスにキャストしようとしたことを示すためにスローされます。 |
IllegalArgumentException | RuntimeExceptionのサブクラスです。不正な引数、または不適切な引数をメソッドに渡したことを示すためにスローされます。 |
IndexOutOfBoundsException | RuntimeExceptionのサブクラスです。ある種のインデックス (配列、文字列、ベクトルなど) が範囲外であることを示すためにスローされます。サブクラスにArrayIndexOutOfBoundsException, StringIndexOutOfBoundsExceptionがあります。 |
NegativeArraySizeException | RuntimeExceptionのサブクラスです。負のサイズを持った配列をアプリケーションが作成しようとした場合にスローされます。NoSuchElementException RuntimeExceptionのサブクラスです。この列挙にそれ以上の要素がないと、Enumeration の nextElement メソッドによってスローされます。 |
NullPointerException | RuntimeExceptionのサブクラスです。オブジェクトが必要な場合に、アプリケーションが null を使おうとするとスローされます。 |
SecurityException | RuntimeExceptionのサブクラスです。セキュリティマネージャによってスローされ、セキュリティ違反を示します。サブクラスにAccessControlException, RMISecurityExceptionがあります。 |
NumberFormatException | IllegalArgumentExceptionのサブクラスです。アプリケーションが文字列を数値型に変換しようとしたとき、文字列の形式が正しくない場合にスローされます。 |
throw
そのキャッチブロックでのみ例外処理をするだけでなく、呼び出し元のキャッチブロックでも例外処理をしなければならないような場合に使います。
例外は受け取るだけでなく、呼び出し元に例外処理を任せる(例外を投げる)ために記述します。
public class Test{
public static void main(String args[]){
try{
a();
}catch(RuntimeException e){
System.err.println("main()例外処理" + e);
}
}
public static void a(){
try{
}catch(RuntimeException e){
System.err.println("a()例外処理" + e);
throw e;
}
}
}
throws
例外を投げる可能性があるコンストラクタやメソッドを明示するために使用します。
class MyException extends Exception {
public String errMsg;
MyException(String msg) { errMsg = msg; }
}
class ThrowTest {
static void methodA() throws MyException {
MyException e = new MyException("Error occured.");
throw e;
}
public static void main(String[] args) {
try {
methodA();
} catch (MyException e) {
System.out.println(e.errMsg);
}
}
}