PHASE2 LOG

主にIT関連・ゲームのログ

Javaのお勉強~例外処理~

      2016/03/12

例外とか例外処理も気になってたものの1つです。

エラーが起きたときにどうするのかってやつですね。

 

例外と例外処理

 

例外(Exception)とはプログラム実行時に起こるエラーのことです。

例えば配列が[0]~[3]までしかないのに[4]を使おうとしたりした場合は例外となります。

 

例外処理がない場合、エラーが起こった時点で処理が終了してしまいますよね。

この例外に対応することを例外処理といいます。

 

Javaは例外が起こると例外クラスのオブジェクトが生成されます。

また、例外クラスにはExceptionクラスとそのサブクラスがあります。

 

一番大きい範囲を拾えるのがExceptionクラスということですね。

例外の種類によってどの例外クラスを指定するのかもあとで勉強してみたいです。

 

例外処理の方法について

 

例外が起こりそうな処理を行う処理を行う時は、try,catch,finallyを使用します。

 

tryには{ }のブロック内に例外が起こりそうな処理を記述します。

次にcatchでは例外の種類を表す例外オブジェクトを受け取り、例外が発生した際の処理を記述します。

最後にfinallyでは例外の有無にかかわらずに実行する処理を記述します。finallyは省略可能です。

 

また、例外が起こると想定されるメソッドではthrowsを使って、想定される例外クラスを指定します。

その場合はこのメソッドで発生した例外を受け取るcatchがないとエラーになります。

 

ここで実際の使い方を見てみましょう。

public class Exc {
	public static void main(String[] args){
		//a[0]~a[3]までの配列
		int a[] = {1, 2, 3};
		
		//配列の参照できる範囲を超える処理
		try {
			//throwsの実験用。コメントをはずすと…
			//num(a);
			
			//a[0]~a[3]まで配列を参照する
			for(int i = 0; i < 4; i++){
				System.out.println("a[" + i + "]:" + a[i]);
			}
		//配列の参照範囲を超えた場合の例外処理
		} catch (Exception e) {
			System.out.println("配列の範囲を超えました。");
		//例外を通っても通らなくても実行
		} finally {
			System.out.println("処理を終了しました。");
		}	
	}
	//a[3]を参照して例外を発生させるメソッド
	static void num(int a[]) throws Exception {
		System.out.println("a[3]:" + a[3]);
	}
}

 

a[0]~a[2]まで3つの要素を持つ配列ですが、tryで配列の範囲を超えたa[3]を参照しようとしています。

普通ならここでエラーになってその後の処理は行われなくなってしまいます。

 

しかし、例外処理ではcatchで例外を受け取って任意の処理を決めることができます。

上記では「配列の範囲を超えました。」のメッセージを出力させて、なぜエラーになったかを

お知らせしています。

 

finallyも例外の有無にかかわらずに実行されるので処理が終わったかどうかを知ることが出来ますね。

上記を実行すると以下のようになります。

a[0]:1

a[1]:2

a[2]:3

配列の範囲を超えました。

処理を終了しました。

 

ちなみにthrowsを使ったnum()メソッドを呼び出してみると以下の結果となります。

配列の範囲を超えました。

処理を終了しました。

 

下のfor文を通らずに、メソッドが呼ばれた時点ですぐに例外処理に移っていますね。

なんとなく使い方がわかってきた気がします。

 

イメージにするとこんな感じでしょうか。

exception

 

 

例外は予め想定しているエラーに対する処理を決めるといった使い方をするようですね。

 

 

人気ブログランキング

 -