LoginSignup
0
1

More than 5 years have passed since last update.

例外

Last updated at Posted at 2018-03-05

例外の種類

例外の種類

エラーの種類は大きく以下の3つ。
1.文法エラー
2.実行時エラー
3.論理エラー

1.文法エラー

・文法の誤りによるコンパイルミス
・例はセミコロン忘れ、スペルミスなど
・コンパイルされない

2.実行時エラー

・実行中に不具合が発生することで発生するエラー
・例はあるはずのファイルが削除される、あるはずの値がnull値になっているなど
・コンパイルされる

3.論理エラー

・構文ミスにより、実行結果が意図していたものと異なること
・例は電卓ソフトで3+5が35と出力されるなど
・コンパイルされる

まとめると・・・

3種類あるが
「2.実行時エラー」に対しては、エラー発生時を想定したコードを記述して対応!
「1.文法エラー」・「3.論理エラー」は、元々のコードを修正して対応!

例外を表すクラスとその種類

・エラー発生状況毎にクラスが用意されており、継承階層で構成されている
・クラス毎の意味・継承階層図は以下の通り

スクリーンショット 2018-03-05 9.38.13.png

まとめると・・・

Exceptionに対しては、エラー発生時に対応出来るようなコードを記述する必要がある

例外の処理

例外の調べ方

例外はJavaAPIに記載されている

スクリーンショット 2018-03-05 14.23.18.png

例外処理の種類

例外処理の種類は大きく以下の2つ。
1.catch構文
2.throws構文

1.catch構文

catch構文とは

例外が発生した場合の処理を、自身のメソッド内に記述する際に使用する

使用方法

try {
  本来の処理
}catch (例外クラス 変数名) {
  例外が発生した場合の処理
}finally{
  例外があってもなうても必ず実行する処理
}

[処理の流れ]
tryメソッド内に処理を記述し、例外が発生した場合は、エラークラスのインスタンスをcatchに渡す
catch(例外クラス 変数名)(例外クラス 変数名)で例外インスタンスを受け取る。
 メソッド内には受け取った後の処理を記述する。
finallyでは、ファイルを閉じる・切断などの処理を実施する。

例外インスタンスが持つ情報

①例外情報の解説文

いわゆる、エラーメッセージ。String getMessage()で表示。

②スタックトレース

JVMがプログラムのメソッドをどのような順序で呼び出し、どこで例外が発生したか。
void printStackTraceで内容表示。

    public static void main (String[] args) {
        FileWriter fw = null;
        try {
            fw = new FileWriter("date.txt");//インスタンスの生成
            fw.write("hellow");//中にhellowと書き込む
        }catch (Exception e) {
            System.out.println("何らかの例外が発生しました");
        }finally{
            try {
                fw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

補足

catch (Exception e)Exceptionの子孫の、例外インスタンスなら全て受け取るという意味
・FileWriterクラスについては以下参照
 https://docs.oracle.com/javase/jp/6/api/java/io/FileWriter.html
 https://www.sejuku.net/blog/20657

finalyを省略した書き方

try (
  ファイルインスタンスの生成
){
  ファイルに対する処理
}catch{
}

()内で開かれた、ファイルやデータベースは、処理終了後に自動でcloseメソッドを呼び出してくれる。

2.throws構文

throws構文とは

例外が発生した場合の処理を、呼び出し元のメソッドにお願いする際に記述する方法

使用方法

メソッド名  throws 例外クラス名1,例外クラス名2 

[補足]
throwsを宣言する事で、try catch文の記述が義務では無くなる
・呼び出し元メソッドは、try catch文を記述する必要がある

例外を発生させる方法

考え方

発生した例外を受け取るだけでなく、例外を通知する事が可能

使用方法

throw 例外インスタンス名

//mainメソッド
public class Main {
    public static void main(String[] args) {
        Person person = new Person();
        person.setAge(-100);

    }
}
//Personクラス
public class Person {
    int age;
    public void setAge(int age) {
        if(age<0) {
            throw new IllegalArgumentException("年齢は正の数を指定すべきです。");
        }
        this.age = age;
    }


}
//出力結果
Exception in thread "main" java.lang.IllegalArgumentException: 年齢は正の数を指定すべきです
    at Java15.Person.setAge(Person.java:7)
    at Java15.Main.main(Main.java:6)

・IllegalArgumentExceptionクラスについては以下参照
https://docs.oracle.com/javase/jp/7/api/

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1