JAVAの例外の取り扱いについて
お世話になります。JAVAでWebアプリケーションを開発しているものです。エラーハンドリングについて、悩んでいます。
私は、我流でプログラムの開発を行ってきたため、エラーハンドリングについて、あまり知識がありません。
今回とあるプロジェクトのリーダーを任されることになり開発を進めていたのですが、気がついたらメンバーのプログラムにtry,catch,throwsなどのエラーハンドリングがコーディングされていない状態で困っています。(みんな外国人で私が今まで一から教えていました。)
そこで、皆様はどのようにJAVAで例外を扱っているのかをお伺いしたいと思い投稿いたしました。
私の少ない認識では、
(1)最上位のクラス、画面に一番近いクラスでtry,catchを行う
(2)Exceptionはすべてのクラスの例外をcatchするが、一つ一つのエラーを明確に定義する方がよい(何のエラーが発生したのかわからない為)
⇒ただし、ここが一番の悩みどころです。エラーを設定する考え方として、配列を扱っている場合は、ArrayIndexとか、ファイルを扱っている場合はI/OExceptionとかソースコードを見て判断すべきでしょうか?
(3)独自エラークラスを作る場合は、Exception,RunnableExceptionを敬称する。
⇒そもそも何故、独自Exceptionクラスを作る必要があるのでしょうか?画面によってメッセージ、処理、遷移先を変えたいから?
上記が私の持っている知識と、疑問点です。
正直自分自身がよくわかっていないため、他の外国人メンバーに説明できません。とりあえず、Exceptionをthrowするように言っているのですが、このままじゃまずいと思い投稿しました。
どなたか忌憚のないご意見をお聞かせください。
No.1
- 回答日時:
プロジェクトのコンセプト、テーマ、目的を明確にしていくと、
例外処理の使用に対する方向性もまとまってくると思いますよ。
例えば、共通ライブラリ作成の時など、
再利用性よりも、使いやすさや開発効率を優先するなら、
例外は、極力throwせずに、Javaの標準ライブラリの例外も、可能な所は、
ラッピングクラスにて、具体的に処理してしまうでしょう。
例えば、使いやすさよりも、再利用性を優先する共通ライブラリなら、
クラス設計は抽象的にしておいて、色々な場面で利用できるようにするでしょう。
その場合、独自にExceptionを作成し、throwする事により、具体的な処理は、
クラスの呼び出し元に委譲することになるでしょう。
オブジェクト指向の考えを用いるなら、クラス部品を再利用率毎に分類し、
例外を処理する役割を、分担すると思います。
こんなところで、回答になっているだろうか・・・
No.2
- 回答日時:
Java経験3年目の若輩者ですが、私の意見では
(1)最上位のクラス、画面に一番近いクラスでtry,catchを行う
>>try,catchは、素直に発生源にに記述すべきかと思います。様々な箇所のExceptionをまとめてcatchする場所を作ると、具体的にどこで落ちたのか、何が原因なのかが分からなくなります。
(2)Exceptionはすべてのクラスの例外をcatchするが、一つ一つのエラーを明確に定義する方がよい(何のエラーが発生したのかわからない為)
⇒ただし、ここが一番の悩みどころです。エラーを設定する考え方として、配列を扱っている場合は、ArrayIndexとか、ファイルを扱っている場合はI/OExceptionとかソースコードを見て判断すべきでしょうか?
>>私はあまり気にしていません。Eclipseに任せてます。(1)で述べたように、発生源でcatchしておけば、何のエラーかは大体分かります。
ただし、tiyojisaka様の現場で、独自のフレームワーク(あるいは携わっている業務に特化したフレームワーク)を用いてるのであれば話は別です。
そのフレームワークは何を可能としているのか、何を目的としているのかを明確にした上で、目的外のものは独自のExceptionによってthrowすべきかと思います。(そして独自のExceptionはcatchされるべきではありません)
(3)独自エラークラスを作る場合は、Exception,RunnableExceptionを敬称する。
⇒そもそも何故、独自Exceptionクラスを作る必要があるのでしょうか?画面によってメッセージ、処理、遷移先を変えたいから?
>>そもそもExceptionとは「例外」です。そのシステムでは許容されない現象を表現するべきです。メッセージ・遷移先くらいであれば、例外を使い分けるのはまぁアリかと思いますが、処理を例外で判断するのはあまり好ましくないのではないでしょうか?だって「例外」だし(笑)
例外によって処理を分ける時点で、それは「例内」であり、Exceptionをthrowするのではなく、その手前でif文なりで分けるべきかと思います。
以上、長々と申し訳ありません。若輩者がピヨピヨ吠えただけですが、何か違う点があれば、逆に指摘していただけると助かります^^;
No.3ベストアンサー
- 回答日時:
忌憚のない意見をお聞かせ下さいということなので、言わせて頂きます。
まず、なぜあなたのような素人に毛が生えたような人がプロジェクトのリーダをしてるのか理解できません。おもちゃのシステムですか?
お金をもらって仕事をしている『プロ』ですよね?
知識のないあなたが、プロジェクトをするべきではありません。
そういう人がシステムを作るから、SEのイメージが良くならないんです。
まじめにやっている者からしたら、本当に腹が立ちます。
Javaの例外は奥が深いです。一長一短で身に付くものではありませんし、ひとことで説明できるものでもありません。
システム全体を通して臨機応変に対処するものです。
最上位で処理すれば良いという、安価な考えでは完全なシステムは作れません。
オブジェクト指向を考えると、個々のクラスの免責を定義できるはずです。
それに従って、そのクラスの免責の範囲ないで例外処理をすべきです。
また、独自例外を作成する理由も、既存の例外では対処しきれない場合があるからです。
Exceptionクラスはただの抽象的な例外クラスです。
Exceptionクラスで処理すべきでないというのは、上記の理由からも明白でしょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- プリンタ・スキャナー キャノンmp490プリンター【エラー番号5400】で【プリンタートラブルが発生しました。電源を入れ直 2 2023/07/24 17:45
- Java すみません。助けてください。 javaについての質問です。 integerに変換できない数値をエラー 5 2022/05/18 19:16
- Windows 10 Windows Updateが動作しません 7 2022/08/12 16:26
- Perl perlをバージョンアップしたら、今まで正常に動いていたプログラムが、エラーになってしまった 3 2022/10/05 15:44
- PHP DBのハッシュ化したパスワードをpassword_verifyで戻し照合したのですが上手く行きません 2 2023/02/06 13:24
- 電子マネー・電子決済 QUICPayの登録ができない。 4 2023/06/10 10:57
- IT・エンジニアリング 不具合の現状認識をしないプログラマって信用できる人? できない人? 8 2023/07/28 09:09
- Windows 10 ノートPCの「アップデートナビ」画面について 1 2023/07/04 21:27
- Excel(エクセル) EXCELの外部データ取得ができない 1 2023/03/23 09:03
- iOS HDD交換修理したWindows10・PCのOFFICE プロダクトキーがエラーとなる 2 2023/04/01 02:17
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
3年間同じクラスになる確率
-
「天声人語」をインターネット...
-
string formatについて
-
「自作クラスの型」にキャスト...
-
java eclipse 型に解決できません
-
内部クラスを別ファイルに
-
javaで画像ファイルの入出力方法
-
エクセルVBAでのwitheventsにつ...
-
サーブレット実行時のエラー
-
体育祭クラス全員参加のムカデ...
-
河合塾のクラス分けについて
-
ASP.NETでのジェネリックの利用
-
クラスにアクセスできません。
-
自作のクラスファイルがインポ...
-
Javaの継承についてです。 この...
-
ATLとMFCの違いは何でしょうか?
-
ベクターワークスでの【クラス...
-
A・B・Cクラスとは?
-
クラスの継承でメンバ変数が・・
-
グローバルIPとプライベートIP...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
河合塾のクラス分けについて
-
同じクラスにならない確率を教...
-
3年間同じクラスになる確率
-
「天声人語」をインターネット...
-
グローバルIPとプライベートIP...
-
配列の重複する値とその個数を...
-
java eclipse 型に解決できません
-
同一パッケージにあるクラスが...
-
私はクラスLINEにまだ入れてな...
-
老い先短い ジジィ が ふと 思う...
-
自作のクラスファイルがインポ...
-
どこからも呼ばれていない無意...
-
main()を持つクラスが2つ以上...
-
数学の計算問題。 3年間同じク...
-
クラス見てから 女の子5人 ネタ...
-
javaのコンパイルができません...
-
1 つのヘッダファイルに複数の...
-
重複エラーを解決するには
-
IPアドレスの3バイト目の呼び方
-
packageとimport の違いって?
おすすめ情報