例外処理

 プログラムで処理をしている最中に何らかの処理によりエラーが発生する場合があります。通常、そのようなエラーが発生するとアプリケーションは停止してしまいます。しかし、エラーが発生したときは、特別な処理をして引き続きアプリケーションを動作させたいという場面が出てきます。ここでは、エラーが発生したときの対処方法を見てみましょう。

 オブジェクト指向言語ではエラーのことを「例外」と呼んでいます。エラーが発生する、つまり、例外が発生することを、「例外がスローされる」といいます。発生した例外の種類に応じ例外に対応するオブジェクトが生成され、スローされます。スローされた例外を取得(キャッチ)して、エラーメッセージを表示させるなどの処理を行います。

例外処理の書式
try
{
 通常の処理
}
catch(例外クラス名 変数名){
 例外処理
}

○ プロジェクト

 プロジェクトを作成して確認してみましょう。

プロジェクトの種類 コンソール アプリケーション
プロジェクト名 TryCatchTest

サンプルダウンロード

○ プログラム

 Mainメソッドに次のようにプログラムを入力してください。

Program.cs

  1. static void Main(string[] args)
  2. {
  3.  try
  4.  {
  5.   //数値を入力
  6.   Console.Write("数値を入力:");
  7.   int num1 = Int32.Parse(Console.ReadLine());
  8.   Console.WriteLine("数値「{0}」が入力されました。", num1);
  9.  }
  10.  catch (FormatException e)
  11.  {
  12.   Console.WriteLine("数字を入力してください。");
  13.   Console.WriteLine(e.Message);
  14.  }
  15.  Console.ReadLine();
  16. }

○ 解説

 13~20行目はtryブロックです。この中に通常の処理を書きます。このブロック内で例外がスローされると、21行目から定義されているcatchブロックに飛びます。

 17行目では、キーボードから入力したデータをint型に変換しています。Int32はint型にあたる構造体です。この構造体のParseメソッドは引数に数字を渡すとint型の数値に変換して返します。引数に数値に変換できないデータを渡した場合、FormatExceptionがスローされるように作られています。詳しくは、MSDNライブラリーを参照してください。.NET Frameworkに用意されているメソッドは今回のようにどのような時にどのような例外が発生するかが説明されています。

 21~25行目はcatchブロックです。catchの引数にキャッチする例外の型を持った変数を宣言します。このブロックは複数記述することができます。Exception型を指定すると、すべての例外をキャッチすることができます(Exceptionはすべての例外クラスのスーパークラス)。このブロック内でエラーメッセージなどの処理を記述します。

○ 実行結果

数値を入力:4
数値「4」が入力されました。
-------------------------------------------------------
数値を入力:a
数字を入力してください。
入力文字列の形式が正しくありません。

前へ   次へ