【Java】例外の発生例と例外処理が必要な理由を書く

こんにちは、エンジニアのオノデラユウト(@CampinggearPOST)です。

Javaでは、プログラムを実行するまでは予想できない、問題ありの動作を例外と言います。
DBに接続しようとしたけど、接続できなかった(←実行するまで予想できなかった動作)

String型をint型にしようとしたけど、変換できなかったとかですね。(←実行するまで予想できなかった動作)

例外と似て非なるものとして、コンパイルエラーがありますが、コンパイルエラーは文法がそもそもが間違っているパターンです。
コードを書いた時点で、それはJavaのルール上、禁止の書き方ですよってやつです。
例えば、次のコードを見てください。

これはint型に文字列を代入していますが、Javaではint型には数字しか入れられないので、int型に文字列を代入するのはルール上禁止されています。これはコンパイルエラーです。

例外はJavaの書き方ルールは合っているけれども、実際にプログラムを動かしてみたらダメなプログラムだったというものです。
コードだけでは一見判断できないやつです。

例えば配列のデータを表示しようとした下のコードを見て下さい。

内容はAというint型の変数配列を宣言しています。Aはint型なので、A[0] に1、A[1]に2、A[2]に3を代入しました。
代入した後、最後のコードでA[3]を表示しようとしていますが、配列Aには3つのデータしか入れられませんので、A[3]はそもそも存在しません。
にもかかわらず表示しようとしています。これ、データが入っていないのに表示しようとしただけでJavaの文法上は合っているのでコンパイルエラーは発生せず、例外が発生します。

ちなみにarrayindexoutofboundsexceptionという配列関連の例外メッセージが表示されます。例外処理をちゃんと記述すれば、例外内容に応じて表示するメッセージを変更することができます。

文字列が入った変数を数値型に型変換しようとしたときなども例外が発生します。

IntegerのparseIntは文字列を数値に変換するメソッドです。書き方は正解です。しかし、Aを数値には変換できないのでclasscastexceptionというクラスキャスト関連の例外メッセージが表示されます。

Javaで例外処理を必要とする理由

例外が発生して、メッセージが表示された後は、残念ながらシステムは停止します。例外発生の瞬間からシステム障害が発生です。

エンジニアにとっては緊急事態です。例外が発生すると、開発エンジニアはかなり焦ります。緊急対応が必要なぐらいピンチな状態です。

「じゃあ例外を表示しないようにすればいいのでは?」

たしかに一理ありますが、でも例外を表示するようにしないとさらにピンチな状態に突入します。悪循環にはまっていくようなもの。

はいっても例外処理のコーディングは地味だし、バグが発生した時の対策とかネガティブで書きたくないですよ。バグがあるのを認めるようなもので、個人的にはけっこう虚しい気分になります(笑)
まぁそれでも例外処理を書かないといけません。

例外処理を発生させたことがない優秀なエンジニア(?)は例外処理を記述する理由がイメージしづらいと思うので、僕なりに例外処理が必要な理由を考えてみました。

理由は2つあると思っています。1つはシステムエラーの原因を探ることと例外処理発生でプログラムを強制的にストップさせるの2つだと思います。

例外処理が必要な理由①システムエラーの原因を早期に探れる

コードの中で「発生しそうな例外」を事前に把握しておけば、それに準じた例外処理を書けます。そして、その例外をSystem.outすれば、例外が発生した時点でバグが発生している箇所のあたりを付けられます。

これは”おはよう”という文字列をparseIntメソッドでint型に変換しようとしていますが、”おはよう”は数字にできないので、classcastexceptionが発生します。そして、catchしているので、画面にはclasscastexceptionが表示されます。
これですぐに「キャストが原因ぽいな」とバグ対応箇所の当たりが付きます。でも、この例外処理がないと、classcastexceptionが裏で発生していたとしても分かりませんね。

例外処理が必要な理由②例外処理発生でプログラムを強制的にストップさせる

プログラムを強制的にストップするって何となくダメなイメージですが、例外が発生しているのに続いているプログラムの方がまずいです。

エンジニアが想像した動きじゃないのに、そのままプログラムが続くと、設計とは大きく異なった状態で画面操作ができてしまいます。

本来、押せないボタンが押せてしまったり、見れてはいけないデータが見えてしまったりします。かなりまずいですよね。
だからこそ、途中で強制的に処理を終了させて不正な処理をさせないようにしているのです。

例外発生の後のプログラム処理を強制的にさせないことで傷口を広げるのを防ぎます。

Javaの例外処理まとめ

Javaの例外は、プログラムの書き方は正解なのに、実際に動かしてみると問題があった場合に例外は発生します。プログラムを動かしてみないと分かりません。そして、例外処理を記述しないとおかしな動作をしてしまう可能性が高いので、ちゃんと例外処理は書きましょう。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です