例外処理

  Java においても,例外処理を必要とする基本的な考え方は C/C++ と同じです.ただ,処理によっては,システムが自動的に例外を送出するため,それを処理するためのブロックを必ず用意しなければならない点が大きく異なります.例えば,今までの Java のプログラム例において,
	try {
		System.out.print("整数データを1つ入力して下さい ");
		 ・・・・・・・・
	}
	catch (IOException ignored) {}
		
のような記述をしたのはそのためです.これは,入出力の際に発生する可能性のある例外を処理(実際には,catch ブロックを見れば明らかなように,何も行いません)するためのものです.また,各箇所で例外を処理することなしに,発生した例外を上位レベルに引き渡すことも可能です.一部のプログラム例において,
	public static void main(String args[]) throws IOException
		
と記述したのがそのことに対応します(この例も,例外を上位レベルに送るだけで,特別なことはしていませんが).

  さらに,Java においては,throw できる例外は,クラス java.lang.Throwable のサブクラスだけです.したがって,プログラム例 7.22 は,Exception クラスを使用して以下のように記述できます.
/****************************/
/* 例外処理                 */
/*      coded by Y.Suganuma */
/****************************/
import java.io.*;

public class Test {
	public static void main (String[] args)
	{
		try {
			sq(1.0, 2.0);
			sq(-1.0, 2.0);
			sq(-1.0, -2.0);
		}

		catch (Exception ex)
		{
			System.out.println(ex.getMessage());
		}
	}
	static void sq(double x, double y) throws Exception
	{
		double z;

		if (x < 0.0 && y < 0.0)
			throw new Exception("両方とも負");
		else {
			if (x < 0.0 || y < 0.0)
				throw new Exception("片方が負");
		}

		z = Math.sqrt(x+y);
		System.out.println(z);
	}
}
		
  プログラム例 7.22 の下のプログラムのような場合は,例えば,以下のように記述できます.
/****************************/
/* 例外処理                 */
/*      coded by Y.Suganuma */
/****************************/
import java.io.*;

public class Test {
	public static void main (String[] args)
	{
		try {
			sq(1.0, 2.0);
			sq(-1.0, 2.0);
			sq(-1.0, -2.0);
		}

		catch (Negative ex)
		{
			ex.message();
		}
	}
	static void sq(double x, double y) throws Negative
	{
		double z;

		if (x < 0.0 && y < 0.0)
			throw new Negative("両方とも負",x, y);
		else {
			if (x < 0.0 || y < 0.0)
				throw new Negative("片方が負", x, y);
		}

		z = Math.sqrt(x+y);
		System.out.println(z);
	}
}

class Negative extends Exception {
	Negative(String str, double x, double y) {
		System.out.println(str + " " + x + " " + y);
	}
	void message() {
		System.out.println("    データを修正してください");
	}
}
		

戻る