アクセス修飾子 class クラス名 extends Exception {
:
:
}
「Exception」クラスを継承しているクラスを継承していないと例外の機能を果たせません。| MyException.java |
|---|
package first.java.unit11.exception;
// 新たな例外クラス
public class MyException extends Exception {
private String data1; // 数値1
private String data2; // 数値2
private StackTraceElement[] traces; // 問題行数
// コンストラクタ
public MyException(final String data1, final String data2,
final StackTraceElement[] traces) {
this.data1 = data1;
this.data2 = data2;
this.traces = traces;
}
// エラーを出力
public void viewError() {
if (data2 == null) {
// 数値1でエラーが起きた場合
System.err.println("数値1には" + data1 + "が入力されました");
System.err.println("数値を入力して下さい");
} else if (data2.equals("0")) {
// 数値2が0の場合
System.err.println("0では割り切れません。0以外の数値を入力して下さい");
} else if (data2 != null) {
// 数値2が0以外でエラーが起きた場合
System.err.println("数値2には" + data2 + "が入力されました");
System.err.println("数値を入力して下さい");
}
// 問題のある行数を出力する
for (int i = 0; i < traces.length; i++) {
if (traces[i].getLineNumber() != -1) {
// 作成したソースの場合
System.err.println(traces[i]);
}
}
}
}
|
// 問題のある行数を出力する
for (int i = 0; i < traces.length; i++) {
if (traces[i].getLineNumber() != -1) {
// 作成したソースの場合
System.err.println(traces[i]);
}
}
です。| Sample12_4_1.java |
|---|
package first.java.unit12.sample;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import first.java.unit11.exception.MyException;
// 単位12 4時間目 サンプル1
public class Sample12_4_1 {
// ここからスタート
public static void main(final String[] args) {
final ExceptionSample es = new ExceptionSample();
try {
System.out.println(es.view());
} catch (final MyException e) {
e.viewError();
} finally {
System.out.println("finallyブロック");
}
}
}
//
class ExceptionSample {
public int view() throws MyException {
BufferedReader br = null;
String strData1 = null;
String strData2 = null;
int sum;
try {
br = new BufferedReader(new InputStreamReader(System.in));
System.out.print("数値1ー>");
strData1 = br.readLine();
final int data1 = Integer.parseInt(strData1);
System.out.print("数値2ー>");
strData2 = br.readLine();
final int data2 = Integer.parseInt(strData2);
sum = data1 / data2;
} catch (final ArithmeticException e) {
throw new MyException(strData1, strData2, e.getStackTrace()); // 例外を発生させる
} catch (final NumberFormatException e) {
throw new MyException(strData1, strData2, e.getStackTrace()); // 例外を発生させる
} catch (final IOException e) {
throw new MyException(strData1, strData2, e.getStackTrace()); // 例外を発生させる
} finally {
try {
if (br != null) {
// ストリームのクローズ
br.close();
}
} catch (final IOException e) {
e.printStackTrace();
}
}
return sum;
}
}
|
数値1ー>10
数値2ー>5
2
finallyブロック
数値1ー>a
finallyブロック
数値1にはaが入力されました
数値を入力して下さい
first.java.unit12.sample.ExceptionSample.view(Sample12_4_1.java:42)
first.java.unit12.sample.Sample12_4_1.main(Sample12_4_1.java:18)
数値1ー>10
数値2ー>a
finallyブロック
数値2にはaが入力されました
数値を入力して下さい
first.java.unit12.sample.ExceptionSample.view(Sample12_4_1.java:45)
first.java.unit12.sample.Sample12_4_1.main(Sample12_4_1.java:18)
数値1ー>10
数値2ー>0
0では割り切れません。0以外の数値を入力して下さい
first.java.unit12.sample.ExceptionSample.view(Sample12_4_1.java:47)
first.java.unit12.sample.Sample12_4_1.main(Sample12_4_1.java:18)
finallyブロック
|
} finally {
try {
if (br != null) {
// ストリームのクローズ
br.close();
}
} catch (final IOException e) {
e.printStackTrace();
}
}
の部分ですが、これは後処理です。