メニューへ戻る
8章 例外処理
学習のポイント
想定外のエラーを回避する「例外処理」のコーディング、及び「例外をかわす」「例外を投げる」を理解しましょう。
1. 例外とは? |
例外とは、「Exception」とも言います。これは、Javaのプログラムが予期しないエラーが発生した場合に、適切にプログラムが終了するように定義するものです。一般的に「エラーのハンドリング」とも言います。 |
2. 例外の文法 |
例外文 |
意味 |
tryブロック |
例外をスローする処理を記述します。 |
catch節 |
例外の指定。 |
catchプロック |
例外に対する処理を記述します。 |
finallyブロック |
例外の有無に関わらず必ず実行される処理を記述します。 |
通常は、以下のようになります。
public class Pafu {
try {
//例外をスローする処理を記述します。
}
catch (例外クラス名 例外パラメータ) {
//例外に対する処理を記述します。
}
//catch文は複数指定できます。
finally {
//例外の有無に関わらず、必ず実行される処理を記述します。
}
}
|
3. 実際にやって見よう! |
以下のプログラムは、ファイルから情報を読取り、画面に表示するクラスです。
import java.io.*;
public class CFileIO {
BufferedReader fin;
public void disp(String fname) {
try {
//ファイルのオープン
BufferedReader fin = new BufferedReader(new FileReader(fname));
//画面へファイルの内容を表示
String ww;
while((ww = fin.readLine()) != null ) {
System.out.println(ww);
}
//ファイルのクローズ処理
fin.close();
}
catch (FileNotFoundException fn) {
System.err.println(fname + "が見つかりませんでした。");
}
catch (IOException iow) {
System.err.println("ファイルのIOエラーです。");
}
finally {
try {
//ファイルのクローズ処理
if (fin != null) {
fin.close();
}
} catch (IOException opw) {
System.err.println("ファイルのクローズ処理に失敗。");
}//try
}//try
}//disp
}//class
実際の処理は、以下のようになります。
public class CMain {
public static void main (String[] args) {
CFileIO fileIO = new CFileIO();
fileIO.disp("pafu.txt");
}
}
これで、画面に「pafu.txt」の内容が表示されます。ちなみに、「pafu.txt」をリネームして実行してみて下さい。
|
4. 例外をかわす |
例外処理では、上記3の方法の他に、「throws節」を使用する方法があります。これを使用すると例外処理の記述は必要ありません。但し、呼び出し側で例外処理の記述が必要となります。このような書き方を「例外をかわす」といいます。上記の処理をこれを使用して、書き直して見ましょう。
import java.io.*;
public class CFileIOThrow {
BufferedReader fin;
public void disp(String fname)
throws FileNotFoundException,IOException {
//ファイルのオープン
BufferedReader fin = new BufferedReader(new FileReader(fname));
//画面へファイルの内容を表示
String ww;
while((ww = fin.readLine()) != null ) {
System.out.println(ww);
}
//ファイルのクローズ処理
fin.close();
}//disp
}//class
実際の処理は、以下のようになります。
import java.io.*;
public class CMain2 {
public static void main (String[] args) {
try {
CFileIOThrow pa3 = new CFileIOThrow();
pa3.disp("pafu.txt");
}
catch (FileNotFoundException fn) {
System.err.println("pafu.txt が見つかりませんでした。");
}
catch (IOException iow) {
System.err.println("ファイルのIOエラーです。");
}
}
}
上記の場合、CFileIOThrowのクラスが、「throws節」を使用しているため、実際の実行クラスであるCMain2では、例外処理を記述しないとコンパイルエラーとなります。 |
5. 例外を投げる |
例えば、5個の要素からなる配列を合計を求める場合に、マイナスの場合にエラーとして例外をスローする場合、例外を明示的に「throw」文により呼びたし側へ「例外を投げる」ことが出来ます。
以下のようにします。これは、合計を求めるクラスです。
public class CKeisan {
public static int intsum(int[] hai) throws Exception {
int goukei = 0;
for (int i = 0; i < hai.length; i++) {
if (hai[i] < 0 ) {
throw new Exception("マイナスのデータがあります。");
}
goukei += hai[i];
}
return goukei;
}
}
上記のクラスでは、データがマイナスの時、例外を発生させています。実際の実行では、
public class CMain3 {
public static void main (String[] args) {
int[] data = {10,15,30,-25,50};
int goukei = 0;
try {
goukei = CKeisan.intsum(data);
System.out.println("合計は、" + goukei + "です。");
} catch (Exception ee) {
System.err.println(ee.getMessage());
}
}
}
これを実行すると、、「マイナスのデータがあります。」と表示されます。dataの「-25」を0以上に変更すれば、問題なく合計が表示されます。 |
Javaプログラミングをもっと学びたいという方は「pafuイーランスクール」「Javaオブジェクト指向講座」よりご確認ください。また、書籍のみご希望の方は「こちら」よりご確認ください。
メニューへ戻る