Java Basic try catch文 〜Step1_3_3〜

イントロダクション

忘れ去られがちですが、エラーハンドル(エラー時に何をするかコントロールする)を行うのには、この文法が基本となります。

実装して動かしてみました。余計な音が入っています。

Exceptionの種類によりコントロールすことができます。コントロールと言ってもExceptionの種類によって処理をかえるというものです。
ちなみにしたの場合は、どんなエラーでもキャッチします。

具体的には、下のように「catch(Exception e)」と書くことですべての例外をキャッチします。


try {
    // 例外が予想される処理
    // throws文のあるメソッド呼び出し
} catch(Exception e) {
    // 例外の内容を表示
    e.printStackTrace();
}

参照するファイルが見つからないときの例外をキャッチしたいとき+すべての例外をキャッチ。

try {
    // 例外が予想される処理
    // throws文のあるメソッド呼び出し
} catch(FileNotFoundException e) {
    // 例外の内容を表示
    e.printStackTrace();
} catch(Exception ex) {
    // 例外の内容を表示
    e.printStackTrace();
}

入出力関連のエラー(例外)をキャッチ+すべての例外をキャッチ。

try {
    // 例外が予想される処理
    // throws文のあるメソッド呼び出し
} catch(IOException e) {
    // 例外の内容を表示
    e.printStackTrace();
} catch(Exception ex) {
    // 例外の内容を表示
    e.printStackTrace();
}

他にもあるのでそれに合わせたExceptionをキャッチしてやれば、どんな例外にも対応が可能!

ちなみにIF文と同じで、Exceptionをキャッチする行を上に持ってくると、下のキャッチ文に届きません。。。

try catch文

基本的な使い方としては、入出力や様々なところでエラーハンドルを行うために使用します。他にも「throw new Exception("メッセージ")」のように独自のメッセージを例外とともに投げることが出来ます。ちなみに「投げる」というのはthrowするという意味です。

実際には、どんな例外も受け取るExceptionクラスを使用しても良いのですが、個別に例外をキャッチするとエラーハンドルがやりやすいと思います。

try{処理}catch(例外の種類){エラー処理}のようにcatchの部分にキャッツする例外を記述します。

見やすくするとこんな感じ

スクリーンショット 2018-10-21 18.44.41.png

サンプルコードはこちら

実装例

try-catch文を場合分けして、サンプルコードを書きました。色々な例外クラスがあるのでJavaDocで調べてみるのも一つです。

例1: 標準入力を受け取るのに例外が投げられる可能性がある時

入出力系の例外はIOExceptionでキャッチします。

// try部分に例が発生するメソッド処理を記載するtry {

   System.in.read(b);

} catch(IOException e) {

   // 例外が起きた時にはキャッチ文ところで処理

   e.printStackTrace();

}

キャッチする例外を分けたい場合は
対応する例外クラスがJavaAPIにあるのでそれをキャッチするように
します。

例2: 例外を別々に受け取る

入出力系の例外とそのほかの例外を場合分けしてキャッチする実装です。

// 5バイト(5文字)分
byte[] b = new byte[5];

try {

   // 入出力の例外を投げる

   System.in.read(b);

  // 文字列を受け取る

  String result = new String(b);

  // 文字列に'a'が見つからない場合

 if (result.indexOf("a") == -1) {

     // 例外を投げる

    throw new Exception("入力違反です");
  }

} catch(IOException ie) {

   // 初めに標準入力の例外を受け取る様にする

   ie.printStackTrace();

} catch(Exception e) {

   // 自分で投げる例外をキャッチ
 
   e.printStackTrace();

}

ちなみに例外を扱う方法は他にもあって
メソッドで「例外をなげますよ」と指定する方法があります。

// Exceptionを投げる可能性があるメソッドを示す
public void testException() throws Exception {
  // 何かの処理
}

この時にはtry catch文は記載する必要がありませんが
このメソッドを呼び出す側がtry catchする必要があります。

そして、以下の様な場合はmainメソッドで例外を検知できません。

public static void main(String[] args) {

   testPrint();

}


/**

 * メインメソッドから直接(クラスをnew しないで)呼び出す時

 * はメソッドの修飾子に「static」をつける

 */

public static void testPrint() {

   try {

      throw new Exception("必ず例外を投げます");

   } catch(Exception e) {

     e.printStackTrace();

   }
}

呼び出し元に例外を検知させたくない場合に
上記の様な書き方を行います。

関連ページ

  1. 標準入力(コンソールからの入力)<System.inクラスについて>
  2. サンプル実装〜コンソールゲーム〜
  3. Java Basic インターフェース・抽象クラスの作り方
  4. Java Basic クラスとは〜Step2_1〜

 



関連ページ

投稿者:

takunoji

音響、イベント会場設営業界からIT業界へ転身。現在はJava屋としてサラリーマンをやっている。自称ガテン系プログラマー(笑) Javaプログラミングを布教したい、ラスパイとJavaの相性が良いことに気が付く。 Spring framework, Struts, Seaser, Hibernate, Playframework, JavaEE6, JavaEE7などの現場経験あり。 SQL, VBA, PL/SQL, コマンドプロント, Shellなどもやります。

コメントを残す