yutoonodera【Java】例外の発生例と例外処理が必要な理由を書くツイートシェアはてブLINEPocketこんにちは、エンジニアのオノデラユウト(@CampinggearPOST)です。Javaでは、プログラムを実行するまでは予想できない、問題ありの動作を例外と言います。DBに接続しようとしたけど、接続できなかった(←実行するまで予想できなかった動作)String型をint型にしようとしたけど、変換できなかったとかですね。(←実行するまで予想できなかった動作)例外と似て非なるものとして、コンパイルエラーがありますが、コンパイルエラーは文法がそもそもが間違っているパターンです。コードを書いた時点で、それはJavaのルール上、禁止の書き方ですよってやつです。次のコードを見てください。"佐々木";これはint型に文字列を代入していますが、Javaではint型には数字しか入れられないので、int型に文字列を代入するのはルール上禁止されています。これはコンパイルエラーです。例外はJavaの書き方ルールは合っているけれども、実際にプログラムを動かしてみたらダメなプログラムだったというものです。コードだけでは一見判断できないやつです。配列のデータを表示しようとした下のコードを見て下さい。3;System.out.println(A[3]);内容はAというint型の変数配列を宣言しています。1、A[1]に2、A[2]に3を代入しました。代入した後、最後のコードでA[3]を表示しようとしていますが、配列Aには3つのデータしか入れられませんので、A[3]はそもそも存在しません。かかわらず表示しようとしています。これ、データが入っていないのに表示しようとしただけでJavaの文法上は合っているのでコンパイルエラーは発生せず、例外が発生します。ちなみにarrayindexoutofboundsexceptionという配列関連の例外メッセージが表示されます。例外処理をちゃんと記述すれば、例外内容に応じて表示するメッセージを変更することができます。文字列が入った変数を数値型に型変換しようとしたときなども例外が発生します。Integer.parseInt(a);IntegerのparseIntは文字列を数値に変換するメソッドです。Aを数値には変換できないのでclasscastexceptionというクラスキャスト関連の例外メッセージが表示されます。例外が発生して、メッセージが表示された後は、残念ながらシステムは停止します。例外発生の瞬間からシステム障害が発生です。エンジニアにとっては緊急事態です。例外が発生すると、開発エンジニアはかなり焦ります。緊急対応が必要なぐらいピンチな状態です。「じゃあ例外を表示しないようにすればいいのでは?」たしかに一理ありますが、でも例外を表示するようにしないとさらにピンチな状態に突入します。悪循環にはまっていくようなもの。いっても例外処理のコーディングは地味だし、バグが発生した時の対策とかネガティブで書きたくないですよ。バグがあるのを認めるようなもので、個人的にはけっこう虚しい気分になります(笑)まぁそれでも例外処理を書かないといけません。例外処理を発生させたことがない優秀なエンジニア(?)は例外処理を記述する理由がイメージしづらいと思うので、僕なりに例外処理が必要な理由を考えてみました。理由は2つあると思っています。1つはシステムエラーの原因を探ることと例外処理発生でプログラムを強制的にストップさせるの2つだと思います。catch)ってけっこうおざなりにしがちだけど、重要ですよね。強制的に処理ストップで後続処理をストップできるし、例外の種類が分かれば障害対応しやすい。例外処理が必要な理由1システムエラーの原因を早期に探れるコードの中で「発生しそうな例外」を事前に把握しておけば、それに準じた例外処理を書けます。その例外をSystem.outすれば、例外が発生した時点でバグが発生している箇所のあたりを付けられます。e){System.out.println(e);}これは”おはよう”という文字列をparseIntメソッドでint型に変換しようとしていますが、”おはよう”は数字にできないので、classcastexceptionが発生します。catchしているので、画面にはclasscastexceptionが表示されます。これですぐに「キャストが原因ぽいな」とバグ対応箇所の当たりが付きます。この例外処理がないと、classcastexceptionが裏で発生していたとしても分かりませんね。例外処理が必要な理由2例外処理発生でプログラムを強制的にストップさせるプログラムを強制的にストップするって何となくダメなイメージですが、例外が発生しているのに続いているプログラムの方がまずいです。エンジニアが想像した動きじゃないのに、そのままプログラムが続くと、設計とは大きく異なった状態で画面操作ができてしまいます。本来、押せないボタンが押せてしまったり、見れてはいけないデータが見えてしまったりします。途中で強制的に処理を終了させて不正な処理をさせないようにしているのです。例外発生の後のプログラム処理を強制的にさせないことで傷口を広げるのを防ぎます。Javaの例外処理まとめJavaの例外は、プログラムの書き方は正解なのに、実際に動かしてみると問題があった場合に例外は発生します。プログラムを動かしてみないと分かりません。例外処理を記述しないとおかしな動作をしてしまう可能性が高いので、ちゃんと例外処理は書きましょう。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。JavaのtimeAPI(LocalDate、LocalTime、LocalDateTime)の使い方を整理しとく【必見】未経験者が最初に学ぶべきプログラミング言語はJavaかC#です(経験談)RECOMMENDこちらの記事も人気です。