wataruの部屋

20代駆け出しシステムエンジニア 低学歴な人生を歩んで来たため仕事させてくれる社会に感謝しています。 ブログの内容は映画やプログラミングに関することなど...

7章<例外処理>

javaの例外処理の重要なポイントをまとめる。

もくじ

  • 例外クラス
  • try-chtch-finaly
  • throwsとthrow
  • 継承関係とオーバーライド時の注意


例外クラス

例外のクラスはthorwableクラスで全てそこから継承されている。
・メモリ不足などのエラーに関するクラスはErrorクラス
・アプリケーションで発生するエラーに関するクラスはException

例外が発生した際に例外に対する処理を必ずしなければならないものと任意のものがある。

・Exceptionクラスを継承したRuntaimeExceptionクラスおよびそのサブクラスは例外処理は任意

・ExceptionクラスおよびRuntaimeException以外のサブクラスの場合は例外処理は必ず記載する

try-chtch-finaly

Try文の記載には組み合わせルールがある
・try-catch-finalyの組み合わせ

・try-catchの組み合わせ

・try-finalyの組み合わせ

try文だけで記載するとコンパイルエラーになります。

finalyブロックは例外の発生有無にかかわらず必ず処理する。

catch文の中でreturn文がある場合。
finalyブロックが先に処理される

処理はcatch→finallyだがreturn文をする前にfinallyが実行されるということ。

catchブロックとfinallyにreturnがある場合
finallyの値で上書きされる。

catch文の戻り値があり、finallyで上書き処理をしても反映されるのは、プリミティブ型だけでcatch文の戻りを上書きしない。
参照型の場合は上書きされる。

throwsとthrow

throwsは呼び出し元に例外を投げる
f:id:koko55120:20190303151400p:plain


throwは例外を意図的に発生させる
f:id:koko55120:20190303151919p:plain


継承関係とオーバーライド時の注意

throws指定されたメソッドをオーバーライドした際のルール
・サブクラスがスローする例外は、スーパークラスのメソッドと同様かそのサブクラスとする。
・サブクラスのスローする例外はRuntimeExcepitonおよびRuntimeExcepitonのサブクラスの例外はスーパークラスに関係なくスローできる。
スーパークラスにスローがあってもサブクラスでスローしないことは可能。

スーパークラスでArrayindexoutofboundsexceptionをthrows
サブクラスでIndexoutofboundsexceptionをthrowsするのはエラーになる。

※ArrayindexoutofboundsexceptionはIndexoutofboundsexceptionのサブクラスであるため

try-catch文にも継承関係のルールがある。
・catch文でcatchする例外はサブクラスから順番に書く。

f:id:koko55120:20190303153109p:plain

スーパークラスで例外をcatchすると到達不可能になるため...