【Java】 エラーが発生した場合の分岐 | 例外処理の使い方ガイド

# はじめに
例外処理はJavaプログラミングにおいて重要な概念です。
例外処理とはプログラムの実行中に発生したエラーを処理するための仕組みです
この記事では、Javaの例外処理の基本的な構文と具体的な使用例を解説します。

## 例外処理の基本的な使い方

Javaでは、例外処理を行うためにtry-catch構文を使用します。
以下は基本的な構文の例です。
```java

import java.util.InputMismatchException;

try {
    // // エラーが発生する可能性のあるコード
} catch (例外クラス 変数名) {
    // 例外クラス名1に対する処理
} catch (例外クラス2 変数名) {
    // // 例外クラス名2に対する処理
} finally {
    // 最終的に実行したい処理があれば記述、省略可
}
```

### 計算エラーの場合（ArithmeticException）
```java
public class Example {
    public static void main(String[] args) {
        try {
            int result = divide(10, 0);
            System.out.println("結果: " + result);
        } catch (ArithmeticException e) {
            System.out.println("エラーが発生しました: " + e.getMessage());
        }
    }

    public static int divide(int num1, int num2) {
        return num1 / num2;
    }
}
```
この例では、divideメソッド内で0で割り算を行おうとしています。
しかし、0で割ることはできないため、ArithmeticException（アリスメティックエクセプション）がスローされます。
try-catchブロックを使用して、例外が発生した場合に備えてエラー処理を行っています。
```csharp:実行結果
エラーが発生しました: / by zero
```

### ファイル読み込みエラー
```java
try {
    File file = new File("sample.txt");
    BufferedReader reader = new BufferedReader(new FileReader(file));
    String line;
    while ((line = reader.readLine()) != null) {
        System.out.println(line);
    }
    reader.close();
} catch (FileNotFoundException e) {
    System.out.println("ファイルが見つかりません: " + e.getMessage());
} catch (IOException e) {
    System.out.println("入出力エラーが発生しました: " + e.getMessage());
}

```
### データベース接続エラー
```java
try {
    Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "username", "password");
    Statement statement = connection.createStatement();
    ResultSet resultSet = statement.executeQuery("SELECT * FROM users");
    while (resultSet.next()) {
        String username = resultSet.getString("username");
        System.out.println("ユーザー名: " + username);
    }
    resultSet.close();
    statement.close();
    connection.close();
} catch (SQLException e) {
    System.out.println("データベースエラーが発生しました: " + e.getMessage());
}
```
### ユーザーからの入力エラー
```java
try {
    Scanner scanner = new Scanner(System.in);
    System.out.print("整数値を入力してください: ");
    int num = scanner.nextInt();
    System.out.println("入力値: " + num);
} catch (InputMismatchException e) {
    System.out.println("入力エラーが発生しました: " + e.getMessage());
}
```

### エラー内容を呼び出し元に送信する（throws）
```java
public class Example {
    public static void main(String[] args) {
        try {
            calculateDivision(10, 0);
        } catch (ArithmeticException e) {
            System.out.println("エラーが発生しました: " + e.getMessage());
        }
    }

    public static int calculateDivision(int num1, int num2) throws ArithmeticException {
        if (num2 == 0) {
            throw new ArithmeticException("0で割ることはできません");
        }
        return num1 / num2;
    }
}

```
この例では、calculateDivisionメソッドが2つの整数を受け取り、もしnum2が0である場合にはArithmeticExceptionをスローしています。mainメソッドでは、calculateDivisionメソッドを呼び出していますが、0で割り算を試みて例外が発生します。そのため、try-catchブロックでArithmeticExceptionをキャッチし、エラーメッセージを出力しています。

throwsキーワードは、メソッド宣言で使用され、そのメソッドが特定の例外をスローする可能性があることを示します。この例では、calculateDivisionメソッドがArithmeticExceptionをスローする可能性があるため、throws ArithmeticExceptionと宣言されています。

## まとめ
例外処理は、プログラム実行中に発生する予期しない状況やエラーに対処するための仕組みです。
try-catchブロックを使用して例外をキャッチし、適切な処理を行うことができます。
例外処理を適切に利用することで、予期せぬエラーに対処し、プログラムの安全性と信頼性を高めることができます。