はじめに
Javaを勉強していると、必ず出てくるのが「エラー」や「例外」。プログラムが途中で止まってしまったり、意味不明なメッセージが出たりして、困ったことはありませんか?
でも大丈夫!Javaには**エラーに強いプログラムを書くための「例外処理」**が用意されています。この記事では、エラーの仕組みと対処法(try-catch-finally・throws)を初心者向けにやさしく解説します。
1. エラー(例外)とは何か?
エラーと例外の違い
- エラー(Error) → JVMの内部的な問題。基本的に開発者は対処しない(例:OutOfMemoryError)
- 例外(Exception) → プログラムで起きた予期しない出来事(例:0で割る、nullにアクセス)
Exceptionの2種類
種類 | 説明 | 例 |
---|---|---|
Checked Exception | 必ずtry-catchまたはthrowsが必要 | IOException, SQLExceptionなど |
Unchecked Exception | 書かなくてもよいが注意必要 | NullPointerException, ArithmeticExceptionなど |
2. try-catch-finally構文
基本の形
1 |
try {<br> // エラーが起きそうな処理<br>} catch (Exception型 変数) {<br> // エラーが起きたときの処理<br>} finally {<br> // 最後に必ず行いたい処理(省略可)<br>}<br> |
実例:0で割ったとき
1 |
try {<br> int result = 10 / 0;<br> System.out.println("結果:" + result);<br>} catch (ArithmeticException e) {<br> System.out.println("0で割れません!");<br>} finally {<br> System.out.println("処理終了");<br>}<br> |
3. throwsキーワードの使い方
メソッド内でエラーが起きそうな処理があるとき、**そのエラーを「呼び出し元に投げる」**ことができます。
1 |
public void readFile(String path) throws IOException {<br> FileReader reader = new FileReader(path);<br>}<br> |
このように書いておくと、呼び出し元がtry-catchで受け取る責任を持ちます。
4. 複数catchとthrow
複数catch
1 |
try {<br> // 何かの処理<br>} catch (IOException e) {<br> System.out.println("ファイル関係のエラー");<br>} catch (NullPointerException e) {<br> System.out.println("nullを使ってしまった");<br>}<br> |
throw文:自分で例外を投げる
1 |
public void checkAge(int age) {<br> if (age < 0) {<br> throw new IllegalArgumentException("年齢は0以上にしてください");<br> }<br>}<br> |
5. finallyブロックの使いどころ
finally
は、エラーが起きても・起きなくても 必ず実行されます。
よくある使い方:ファイルやDBの後始末
1 |
FileReader reader = null;<br>try {<br> reader = new FileReader("data.txt");<br> // 読み取り処理<br>} catch (IOException e) {<br> e.printStackTrace();<br>} finally {<br> if (reader != null) {<br> reader.close(); // 忘れずにクローズ!<br> }<br>}<br> |
6. よくある例外と対処法
例外名 | 原因 | 対処法 |
---|---|---|
NullPointerException | nullにアクセス | nullチェックする |
ArrayIndexOutOfBoundsException | 配列の外にアクセス | 配列の長さをチェック |
NumberFormatException | 文字列→数値変換失敗 | 入力値をチェック |
IOException | ファイル読み込み失敗 | ファイル存在確認+try-catch |
InputMismatchException | Scannerで型が違う入力 | hasNextInt() などで事前確認 |
7. 実践コード例:ファイル読み込み
1 |
import java.io.*;<br><br>public class FileReaderExample {<br> public static void main(String[] args) {<br> try (BufferedReader br = new BufferedReader(new FileReader("sample.txt"))) {<br> String line;<br> while ((line = br.readLine()) != null) {<br> System.out.println(line);<br> }<br> } catch (FileNotFoundException e) {<br> System.out.println("ファイルが見つかりません");<br> } catch (IOException e) {<br> System.out.println("読み取りエラー");<br> }<br> }<br>}<br> |
8. 例外処理のベストプラクティス
- 例外を握りつぶさない(
catch(Exception e) {}
は避ける) - エラーメッセージをログに残す
- 再スローや例外のラッピングも検討
9. 学習の進め方
エラー処理は地味ですが、「信頼できるプログラム」を作るための大切な技術です。
まずは、「絶対にJavaプログラマーになりたい人へ。」で例外処理の考え方を学びましょう。
そして、**実践的なコードのレビューやサポートを受けたい方は「サイゼントアカデミー」**を活用するのが近道です!
まとめ
- Javaの例外処理で安全なコードが書ける
- try-catch-finallyは基本中の基本
- throwsで呼び出し元に例外を投げる
- よくあるエラーには早めのnullチェック&ログ出力を
コメント