0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【例外の処理】

Last updated at Posted at 2024-06-02

はじめに

オラクル認定資格教科書 Javaプログラマ Silver SE8
第一章 Javaの基本 
第二章 Javaのデータ型の操作
第三章 演算子と判定構造の使用
第四章 配列の作成と使用
第五章 ループ構造の使用
第六章 メソッドとカプセル化の操作
第七章 継承の操作
第八章 例外の処理← イマココ!!
第九章 Java APIの主要なクラスの操作

例外とは

 例外とはプログラム実行時に発生する予期せぬエラーのこと。
 例外は「エラー(Error)」と「例外(Exception)」に区別され、その違いはプログラムで対処できるかできないかにある。
 エラー → プログラムで対処できない致命的な例外
 例外 → プログラムで対処できる例外
 例外はさらに検査例外(Exception)と非検査例外(RuntimeException)に分けられる。
 検査例外とは、例外処理を記述したかどうかをコンパイラが検査する例外。
 非検査例外とは、例外処理を記述したかコンパイラーが検査しない例外。(記述してもしなくてもOK)

Exceptionクラスのサブクラスは、RuntimeExceptionとそのサブクラスを除いて、すべて検査例外である。そのため、Exceptionクラスを継承している例外クラスは、try-catchしているか、もしくはthrows句で宣言しているかのどちらかを強制される。

例外処理

・try-catchを使う方法
・throwsを使う方法

try-catch文

例外が発生する可能性がある処理をtryブロックで括り、例外で発生したときの処理をcatchブロックに記述する。
catchブロックは複数記述可能(例外の種類を分けられる)

try {
  // 例外が発生する可能性のある処理
} catch (例外クラス型 変数) {
  // 例外が発生したときの処理
}

try-catch-finally文

 例外発生の有無に関わらず、必ず実行したい処理を記述するのがfinallyブロック。
 例外が発生しない場合 try → finally
 例外が発生した場合 try → catch → finally

try {
  // 例外が発生する可能性のある処理
} catch (例外クラス型 変数) {
  // 例外が発生したときの処理
} finally {
  // 例外発生の有無に関わらず実行したい処理
}

catchブロック内に呼び出し元へ制御を戻すreturn文がある場合、その前にfinallyブロックが実行される。
(finallyが実行される前に制御は戻されないが、returnする内容はすでに仮想の変数にセットされている。書き換えたい場合はfinallyでreturn文を使って上書きが必要。)
catchブロックとfinallyブロックの両方にreturn文がある場合、finallyのreturnが返却される。

throws宣言

 throwsはメソッド内で例外が発生した場合、自身のメソッド内でcatchするのではなく、呼び出し元に例外を投げる処理。

private void メソッド名() throws 例外{
  // なにかしらの処理
}
public static void sample() throws IOException{
  FileWriter fw = new FileWriter("date.txt");
  fw.write("hello!");
}

--------------------------------------------------

public class Main{
    public static void main(String[] args){
        try{
             sample(); // sampleメソッドからIOException例外が帰ってくる
        }catch(IOException e){
            System.out.println("入出力関係の例外が発生しました");
        }
    }
}

例外の送出(throw)

throwを使用すると任意のタイミングで例外を発生させて、例外処理を行うことができる。

throw new 例外();

あるいは

throw new 例外("メッセージ");
Public class Person{
    int age;
    public class setAge(int Age){
        if(age <= 0){
        // 0以下だった場合
            throw new IllgalArgumentExeception("年齢は正の数にしてください。指定値=" + age);
        }
        // 正数だった場合
        this.age = age;
    }
}

例外の種類

一部のみ抜粋
Throwable

Error
StackOverflowError (スタック領域のオーバーフロー)
OutOfMemoryError (メモリの不足)
InternalError (内部エラー)
ClassFormatError (クラスファイルの破損、解釈できない)
UnknownError (未知の重大なエラー)
Exception
IOException (入出力関係の例外)
ClassNotFoundException (クラスが見つからない)
NoSuchFieldException (クラスに要求したフィールドがない)
TimeoutException (ブロック操作がタイム・アウトしたとき)
SQLException (DB系の例外)
ConnectException (接続拒否に関連するエラー)
RuntimeException
NullPointerException (参照型変数にnull値が格納されている)
NumberFormatException (文字列を数値型に変換するときに文字列が数値型に適した状態でない場合)
IllegalArgumentException (不正な引数をメソッドに渡した)
ArrayIndexOutOfBoundsException (配列で存在しない要素へのアクセス)

リンク集

【Javaの基本①】クラスの構造
【Javaの基本②】パッケージとインポート
【継承の操作②】インターフェース
【Javaのデータ型の操作①】プリミティブ型のデータ・参照型
【演算子と判定構造の使用①】論理演算子(&&、||)、同一性(==)、同値性(equals)
【演算子と判定構造の使用②】分岐処理(if、swich)
【配列の作成と使用】
【ループ構造の使用】while文、do-while文、for文、拡張for文
【メソッドとカプセル化の操作①】メソッドの概要
【メソッドとカプセル化の操作②】オーバーロード、コンストラクタ
【継承の操作①】クラスの継承
【例外の処理】
【Java APIの主要なクラスの操作】

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?