バナー画像

Javaでは例外処理を記述する際、Exceptionクラスを利用してエラー時の対処方法を定義します。

本記事では、Java初心者向けにExceptionクラスの基本的な使い方についてご紹介していきます。

Javaにおけるエラーと例外の違い


エラーと例外は同じような意味合いとして利用されることもありますが、Javaのプログラミングでは異なる状況を意味することも少なくありません。

まずはエラーと例外処理の一般的な違いについて解説していきます。

エラーとは

エラーとはプログラムが正常に動作せず、異常終了する状態やそもそも動作しない状態のことを指します。

エラーは大きく分けて「コンパイルエラー」と「実行時エラー」に分けることが可能です。

コンパイルエラー

コンパイルエラーは文法エラーが発生しており、そもそも実行出来る状態にないソースコードのエラーを指します。

Javaで記述されたプログラムは機械語に変換する作業(コンパイル)が必要となりますが、コード変換に失敗することで発生するエラーです。

実行時エラー

実行時エラーはプログラムの実行自体は可能ですが、何らかの問題により異常終了となってしまうエラーを指します。

コンパイルが出来たからといって期待通りの動作が実行される保証はありません。

実行時エラーではプログラムが強制終了されることもあれば、そのまま意図しない動作が継続される可能性もあるため注意が必要です。

例外処理とは

例外処理とは、実行時エラーが発生した際、システムの停止やデータを破損させないように対処する処理のことを指します。

システム障害が起こってしまった場合、どのような影響が出るのか予測が出来ないため、エラーが起きた際の対処法をあらかじめ例外処理として定義しておくことにより、開発者側でエラーをコントロールすることが可能となります。

ポテパンダの一言メモ

エラーと例外の使い方は利用する人や状況によっても異なるため、あくまで今回の内容を目安とした上で文脈などから判断しましょう。

Javaでの例外処理の書き方


Javaで例外処理を記述する場合「try文」を利用します。

基本構文

try文は「try~catch~finally」の大きく3つのブロックで記述します。

try {
  例外が発生する可能性のある処理を記述;
} catch (例外クラス 変数名) {
  例外が発生した場合の処理を記述;
} finally {
  例外が発生してもしなくても必ず行うべき処理を記述;
}

finally{}ブロックに関しては、必要なければ記述しなくても問題ありません。

ポテパンダの一言メモ

try{}とcatch{}ブロックは例外処理ではセットで記述するものと覚えておきましょう。

catch句は複数記述可能

例外処理を記述するcatch句は1つのtry文で複数記述することが可能です。

例外クラスが引数として指定出来るため、エラー内容によって例外処理を切り替えることが出来ます。

try {
  例外が発生する可能性のある処理を記述;
} catch (例外クラス1 変数名1) {
  例外クラス1に該当するエラーが発生した場合の処理を記述;
} catch (例外クラス2 変数名2) {
  例外クラス2に該当するエラーが発生した場合の処理を記述;
}

例外クラスには、「IOException」「NullPointerException」など様々なクラスが用意されています。

メソッドから呼び出し元へ例外を返却

メソッドを利用する場合、呼び出し元へ例外を返却する方法として「throws」を利用します。

メソッド名 throws 例外クラス {
  例外が発生する可能性のある処理を記述;
}

呼び出し元へ例外を返却する場合、呼び出し元でtry~catchの処理を記述する必要があります。

try {
  メソッド名();
} catch (例外クラス 変数名) {
  例外が発生した場合の処理を記述;
}

Java例外処理のパターン


では実際にJavaの例外処理をいくつかのパターンで確認してみましょう。

IOException

まずはファイルを読み込もうとした際、指定したファイルが存在しなかった場合のエラーを確認してみましょう。

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;

public class Main {

	public static void main(String[] args) {
		try {
			List file = Files.readAllLines(Paths.get("sample.txt"));
		} catch(IOException ex) {
			System.out.println("IOExceptionが発生しました。");
			System.out.println(ex);
		}
	}

}

実行結果が下記です。

IOExceptionが発生しました。
java.nio.file.NoSuchFileException: sample.txt

サンプルでは、IOExceptionクラスでエラーをキャッチしています。

Exception

汎用的に例外をキャッチしたい場合には「Exception」クラスを利用することが可能です。

Exceptionクラスを利用することで、Exceptionクラスを継承した例外を汎用的にキャッチすることが出来ます。

import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;

public class Main {

	public static void main(String[] args) {
		try {
			List file = Files.readAllLines(Paths.get("sample.txt"));
		} catch(Exception ex) {
			System.out.println("Exceptionが発生しました。");
			System.out.println(ex);
		}
	}

}

実行結果が下記です。

Exceptionが発生しました。
java.nio.file.NoSuchFileException: sample.txt

上記のIOExceptionクラスを汎用的なExceptionクラスに変更した場合でも、例外処理を実施出来ていることが確認出来ます。

ポテパンダの一言メモ

例外クラス毎に処理を細かく分けることは出来ませんが、最低限の例外処理を記述する場合には上記サンプルのようにExceptionクラスを指定することで対応することが可能です。

オリジナルの例外クラス

Java標準で用意されているクラス以外にも自分で例外クラスを作成することも可能です。

オリジナルの例外クラスを作成する場合、既存の例外クラスを継承して作成します。

public class Main {

	public static void main(String[] args) {
		try {
			throw new OriginalException("オリジナルの例外クラスです。");
		} catch(OriginalException ex) {
			System.out.println(ex);
		}
	}
}

class OriginalException extends Exception {
	OriginalException(String msg) {
		super(msg);
	}
}

実行結果が下記です。

sample.OriginalException: オリジナルの例外クラスです。

今回はサンプルとして「OriginalException」の例外クラスを作成し、mainメソッドで「throw」により強制的に例外クラスを呼び出しています。

出力結果を確認してみると、オリジナルの例外クラスが適用されていることをご確認頂けます。

さいごに: Javaプログラムでのエラー(例外)処理の重要性を把握しよう


本記事では、Javaプログラムにおける例外処理の基本についてご紹介してきました

実行時エラーが発生した際、システム障害を発生させないためにも例外処理を記述しておくのは基本です。

まずは今回ご紹介した基本となる知識や使い方を参考に、作成したプログラムにどのような例外処理を記述するのが適切なのかを学習していきましょう。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。