【Java入門】try・catch・ finally・throws...例外処理ってどんなもの?
- ツイート
-
- 2018/02/21
問題なくコンパイルできたプログラムであっても、実行中にエラーが発生することがあります。このような場合に本来の処理を中断して別の処理を実行することを例外処理といいます。今回は、Javaプログラムの安全性を高める上で欠かせない仕組みである「例外処理」についてご紹介します。
IT業界まるわかりガイドは、日本初Web専門スクールのインターネット・アカデミーが運営する業界情報メディアです。最新の業界情報を、初心者にも分かりやすくご紹介しています。
目次
「例外」とは
Javaプログラムは、実行前にコンパイルを行うことによって、文法上のエラー(コンパイルエラー)を取り除くことができます。しかし、問題なくコンパイルできたとしても、プログラムの実行途中でエラーが起きてしまう(実行時エラー、もしくはランタイムエラーという)場合があります。
このようなプログラム実行中に発生する想定外の事象を「例外」、例外発生に備えて記述しておく処理を「例外処理」と呼びます。例外が発生することは、「例外が投げられる」「例外がスローされる」ともいいます。
例外が起きる代表的なケースに、ゼロ除算(0による割り算)があります。以下のプログラムは、実行しても異常終了します。
【プログラム例】
public static void main(String[] args){ int a; int b = 100; int c = 0; a = b/c; }
検査例外(Exception)
例外の中でも、「参照するファイルが存在しない」「データベースにアクセスできない」など、開発者側では防ぐことのできないものが検査例外です。
プログラムに検査例外の処理を記述していない場合、コンパイルエラーになります。
検査例外の処理は、try、catch、finallyを用いて、以下のように記述されます。
【try-catch-finally文の書式】
try { 例外が発生する可能性のある処理 } catch(例外クラス名 変数名) { 例外発生時の処理 } finally { 最後に必ず実行される処理 }
複数のメソッド内に同じ例外処理を記述したい場面も出てくるでしょう。しかし、毎回try-catch-finally文だけで記述すると、コードの重複が起こり、プログラムの可読性(プログラムの読みやすさ)が低下します。
このようなときは、例外が発生する可能性のあるメソッドをthrowsによって明示し、別のクラスにtry-catch-finally文を記述する(例外処理を別のクラスで定義する)方法が有効です。
throwsで明示したメソッドにより例外が発生した場合、メソッドの呼び出し元に例外が投げられます。
【throws文の書式】
例外が発生する可能性のあるメソッド名 (引数) throws 例外クラス名{ 処理 }
その他の例外
検査例外の他にも、実行時例外、エラーと呼ばれる例外があります。これらは例外処理を記述していなくてもコンパイルエラーにはなりません。
実行時例外(RuntimeException)
null(定義されていない値)オブジェクトにアクセスしたときや、配列作成時に定義した要素の範囲外を指定したときが実行時例外に該当します。実行時例外は非検査例外とも呼ばれます。
エラー(Error)
エラーはJava仮想マシン(JVM)が実行不能になるなど、システム異常が発生したときが該当します。代表的なものとして、VirtualMachineErrorがあります。
おわりに
今回はtry、catch、finally、throwsを用いた例外処理について説明しました。個人による小規模なプログラム開発であれば、エラーの発生が大きな問題に発展する可能性は低いです。しかし、大規模な業務システムやWebサービスになると、エラーが及ぼす影響はとても甚大なものになります。適切な例外処理の方法をマスターして、信頼性の高いプログラムを書けるようにしましょう。
例外処理はJavaの中でも重要なテーマであるため、しっかりと理解して実践的に使えるようにしておくことが必要です。インターネット・アカデミーでは、開発現場の事情まで把握した講師による実践的な指導を受けることができます。将来IT業界やWeb業界で働くことを希望される方は、インターネット・アカデミーでJava講座を受講してみませんか