第18章 例外処理

この章では例外処理に関する基本的な考え方について説明します 。

HOMEPAGE

例外処理


Exception(例外)とはプログラムは予めどういった処理をするのか、という手順を書いたものですが、状況によっては予期しない事象で正しく処理が行えないことがあります。

そのような予期しない状況をJavaでは例外と呼んでいます。


Javaで発生する例外は以下のようになります。



3.例外の処理方法

try-catch文は自分で例外を処理する

try{
例外が発生しているかどうか調べる文;
  ...
}
catch (例外クラス 変数名){
例外クラス1の例外が発生した時に行う文;
  ...
}

例:[JSample18_1.java]
package JSample;
public class JSample18_1 {
    public static void main(String[] args) {
        int[] myNumbers = {1, 2, 3};
        System.out.println(myNumbers[10]);
    }
}
実行結果
error pic


例:[JSample18_2.java]
package JSample;
public class JSample18_2 {
    public static void main(String[ ] args) {
        try {
            int[] myNumbers = {1, 2, 3};
            System.out.println(myNumbers[10]);
        } catch (Exception e) {
            System.out.println("例外が発生しました。");
        }
    }
}
実行結果
例外が発生しました。


Finallyは自分で例外を処理して、かつ例外の有無に関わらず必ず処理させたい場合に使います。

try{
例外が発生しているかどうか調べる文;
  ...
}
catch (例外クラス 変数名){
例外クラス1の例外が発生した時に行う文;
  ...
}
finally {
例外が発生するしないに関わらず実行する文;
  ...
}
例:[JSample18_3.java]
package JSample;
public class JSample18_3 {
    public static void main(String[] args) {
        try {
            int[] myNumbers = {1, 2, 3};
            System.out.println(myNumbers[10]);
        }catch (Exception e) {
            System.out.println("Something went wrong.");
        }finally {
            System.out.println("The 'try catch' is finished.");
        }
    }
}
実行結果
例外が発生しました。
絶対に実行させる処理を記述できます。


自分では処理せず、例外処理を呼び出し元のクラスにスルーする

public void read() throws FileNotFoundException, IOException {
    //メソッド内容
}
例:[JSample18_4.java]
package JSample;
import java.io.FileNotFoundException;
import java.io.FileReader;
public class JSample18_4 {
 
    public static void main(String[] args) {
        String fileName = "sample.txt";
        
        try{
            read(fileName);
        }catch (FileNotFoundException e) {
            System.out.println("ファイルが存在しませんでした。");
        }
    }
    
    public static void read(String fileName) throws FileNotFoundException {
        FileReader r = new FileReader("sample.txt");
        System.out.println("ファイルを読み込みました"); 
    }
}    
実行結果
ファイルが存在しませんでした。



練習

問題[JEx18_1]
例外インスタンスのgetMessageメソッドを呼び出して取得した値を表示してください。 それ以外の例外が発生した場合、「2つの数値を指定してください」と表示してください。

public class JEx18_1{
    public static void main(String[] args){
        double weight = Double.parseDouble(args[0]);
        double height = Double.parseDouble(args[1]);
        System.out.println( "BMI = " + getBMI(weight,height) );
    }
    public static double getBMI(double weight, double height){
        return weight / ( height * height );
    }
}
実行結果1
2つの数値を指定してください

実行結果2(weight:-65 height:170)
負の数を用いることはできません

実行結果3(weight:65 height:170)
BMI = 22.49134948096886



戻る