try/catchによる処理継続、finallyブロック、例外クラスの種別など。Javaの例外処理についてまとめています。
プログラムはコンパイルが成功しても、実行した際にエラーが発生することがあります。 Javaでは、プログラム実行時に発生したエラーを例外と呼びます。
例外は発生箇所(一番下はJVM)から呼出元へと通知されていく仕組みになっていて、例外が投げられてくるイメージになります。 このようなイメージの例外ですが、Javaでは、例外が発生することを「例外がスローされる」といいます。
Javaには、例外がスローされた後に例外を感知する仕組みがあります。 これをキャッチするといいます。
継続的に実行し続けないといけないアプリケーションの場合、実行時に起こり得るエラーによって異常終了しないようにエラー予防をしておく必要があります。 例外処理を実装する必要があります。 Javaには、try/catch文という例外をキャッチする仕組みがあり、これを活用して例外処理を実装していきます。
Javaでは例外(Exception)が発生したときにプログラムがどう振舞うかを記述することで、万一例外が発生してもプログラムの実行が継続できるように出来ます。
try/catch文を使用すると、実行時エラーに対応したプログラムを作成できます。 この処理を「例外処理」と呼びます。
例外処理の基本形は以下のようになります。
try { 例外が発生する可能性のある処理; } catch(例外のクラス 変数名) { 例外に対する処理; }
例外処理は、まずtryで、例外が発生する可能性のある処理を行い、例外が発生した場合はcatchで細くし、種類に応じた処理を実行します。
なお、catchは、どのような例外に対応するのかを示す例外のパラメータを必要とします。
たとえば、次のコードのように配列の要素数を超えて値の代入を行うと構文のエラーは表示されませんが、いざ実行してみると次のようにエラー(例外)が発生します。
public class Sample { public static void main(String[] args) { int numArry[] = new int[2]; numArry[4] = 10; System.out.println("配列の5番目の値は" + numArry[4] + "です。"); } }
javac Sample.java java Sample Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4 at Sample.main(Sample.java:4)
そこで、以下のように、例外が発生する可能性のある処理をtryで囲み、発生した例外をパラメータとしてcatchを記述します。
public class Sample { public static void main(String[] args) { int numArry[] = new int[2]; try { numArry[4] = 10; System.out.println("配列の5番目の値は" + numArry[4] + "です。"); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("配列の要素に値が代入できません。"); } } }
javac Sample.java java Sample 配列の要素に値が代入できません。
このように、今度は実行すると「配列に値を代入できません。」と表示されます。
以上のように、例外処理を行えば、プログラムが強制終了することはありません。 実行時エラーが発生しても、適切なエラーメッセージを表示して、最後まで無事に実行されるプログラムとなります。
上記では、tryとcatch文について見て行きました。 tryブロックは例外が発生しそうなところに、catchブロックは例外が発生したときの処理を定義しました。
ただ、例外が発生しても発生しなくても必ず実行したい処理もあります。 例えば、ファイルやDBにアクセスしていた場合の最後のファイルやDBとのコネクションを閉じる処理があげられます。 このように例外の発生有無にかかわらず必ず実行したい処理はfinallyブロックに定義できます。
try { 例外が発生しそうな処理; } catch (キャッチする例外クラス) { 例外発生時の処理; } finally { 例外が発生してもしなくても行いたい処理; }
なお、Java7からはtry-with-resource文が登場して、Closeableインタフェースを実装しているクラスなら、リソースの解放処理などfinallyブロックを記述しなくても終了処理が自動で実行できるようになりました。
try (リソース;) { 例外が発生しそうな処理; } catch (キャッチする例外クラス) { 例外発生時の処理; }
Javaの例外クラスは、unchecked例外とchecked例外があります。
unchecked例外は、例外処理が必須とされていない例外です。 アプリケーションのバグによる例外やメモリ不足などプログラムでは復旧できないような例外です。 これらの例外はErrorクラスとそのサブクラス、RuntimeExceptionクラスとそのサブクラスが当てはまります。
データベースなどJava実行環境以外の環境要因が原因で発生する例外です。 checked例外はRuntimeExceptionクラス以外のExceptionクラスのサブクラスです。
Javaとは?から言語の枠を超えるところまで、Java言語についてまとめています。
スポンサーリンク
サイト内のページ
言語
C・C++
/HTML
/Java
/JavaScript
/PHP
/シェルスクリプト
開発環境
Ant
/Burp
/Eclipse
/Fiddler
/gcc
/gdb
/Git
/g++
/JDK
/JMeter
/JUnit
/Teraterm
/ZAP
技術・仕様
Ajax
/CORBA
/Jakarta EE(旧称J2EE、Java EE)
/JNI
ライブラリ/Framework/CMS
bootstrap
/jQuery
/FuelPHP
/Lucene
/MyBatis
/Seasar2
/Spring
/Struts
/WordPress
Web API
Google Maps
ITインフラOSとミドルウェア
Linux
/Windows
/シェル
ActiveMQ
/Tomcat
/MariaDB
/MySQL
/Nagios
/Redis
/Solr
ITインフラセキュリティ
公開サーバーのセキュリティ
SI
ホームページの作り方
スポンサーリンク
関連サイト内検索ツール
zealseedsおよび関連サイト内のページが検索できます。
IPアドレス確認ツール
あなたのグローバルIPアドレスは以下です。
18.188.91.223
HTMLの表示色確認ツール
パスワード生成ツール
文字数のプルダウンを選択して、取得ボタンを押すと「a~z、A~Z、0~9」の文字を ランダムに組み合わせた文字列が表示されます。
ここに生成されます。
スポンサーリンク
Copyright (C) 2007-2024 zealseeds. All Rights Reserved. Loarding…