プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • Java
  • 【Java】例外処理の基本と、「独自例外」を作成するかのポイント
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【Java】例外処理の基本と、「独自例外」を作成するかのポイント

06.19

  • miyabisan2
  • コメントを書く

この記事は2分で読めます

Javaの例外の種類

まずは、「独自例外」という前に、Javaにはどんな例外の種類があるか振り返っておきましょう。

Javaには、「例外クラス」があり、下記のような継承関係のクラスになっています。

Throwable

全ての例外クラスの親クラスです。何らかの例外を嶋します。

Error

回復の見込みが薄い致命な例外(アンチェック)です。例外処理の必要はありません。(例:OUtOfMemoryError等)、try-catchする必要はありません。

これが発生するということは、アプリケーションは異常な状態になっており、速やかにアプリを停止させるべきです。

Exception(チェック例外)

例外が起きることを想定して例外処理をすべき例外のことです。(例:IOException等)、try-catchしないとコンパイルエラーになります。プログラマ側で例外の発生を防ぐことができないので、必ず例外処理をするようにしましょう。

これが発生しても、プログラムは終了しませんが、エラーが発生しているので基本的には処理を中断させる方が無難です。

throw、thorowsを使って、呼び出し元のプログラムに処理を委託するという書き方が一般的です。

詳しくは下記の記事でも解説しています。

【Java基本】例外処理はthrow、throwsをできるだけ使おう。

RuntimeException(実行時例外)

必ずしも例外が発生することを想定する必要がない例外のことです。(例:NullPointerException、ArrayIndexOutOfBoundsException等)、try-catchするかは任意ですが、基本的には例えばNullPointerExceptionであれば、if文を使えば例外を回避することができるので、例外処理をするべきではありません。

これが発生したら、強制的にアプリケーションが終了します。

「独自例外」は作った方がよいのか?

通常は、Java標準の例外クラスから、選んで例外を作成するのがよいと思います。

しかし、下記の条件を満たす場合は独自例外を作成してもよいと思います。

  • 業務に特化しており、どんなシステムでも汎用的に使える例外処理でない場合(例えば、特定のビジネスロジックや、APIの個別エラーレスポンスを返したい場合など)
  • そのアプリで共通の例外処理を作りたい場合

独自例外を導入するメリット

  • Java標準の例外クラスと区別することで、実装者が独自例外だけを意識すればよくなる。
  • 例外処理が汎用化されて、それだけ直せばいいので、システムの保守性が上がる。

独自例外の作り方

独自例外を作る場合は、2通りの選択肢があります。

  • 検査例外を作る。
  • 実行時例外を作る。

検査例外を作る。

java.lang.RuntimeExceptionクラスを継承して独自例外クラスを作りましょう。

例

1
2
3
4
5
6
7
8
public class ImageException extends RuntimeException {
 
//エラーメッセージを受け取るコンストラクタ
public ImageException(String msg) {
super(msg);
}
 
}

実行時例外を作る。

java.lang.RuntimeExceptionクラスを継承して独自例外クラスを作りましょう。

昨今の例外

昨今のJava開発で主流になっているフレームワークでは、下記の狙いからかたいてい実行時例外になっていて、フレームワーク側が一手に例外を引き受けます。

よって、プログラマ側で「try - catch」による例外処理をしなくてもよくなっています。

  • ソースコードをシンプルにするため。
  • 例外ロジックを個々のロジックにいちいち記載しないようにするため。
スポンサーリンク
  • 2018 06.19
  • miyabisan2
  • コメントを書く
  • Java
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2018 05.12

    【GoFのデザインパターン】「Abstract Factory」ってどんなパターン?

  2. 2018 04.18

    【JSP】構成要素(コア要素、ディレクティブ、アクション)

  3. 2018 04.01

    【Javaサーブレット】セッション管理について

  4. 2018 05.13

    【GoFのデザインパターン】「Proxy(プロキシ)」ってどんなパターン?

  5. 2018 05.05

    【Maven】基本的なゴールについて

  6. 2018 04.30

    【Java】オブジェクト指向:継承の考え方や注意点

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【Ruby on Rails】の「O/Rマッパー」であ…

【Struts】EclipseにStrutsをインスト…

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー