チェックされている例外だけを捕捉し、チェックされていない例外は捕まえたくないという状況を想像することができます。私はそれを他のやり方でやっているとは本当に想像できません。RuntimeExceptionがExceptionを拡張するのはなぜですか?それ以外の方法はありません。
答えて
チェックされた例外をキャッチしたり、再度スローしたり、コードをコンパイルできません。だからあなたのコード全体では、明示的にとにかく(スローまたはキャッチ)それらの各1つを処理する必要があります。
そして唯一確認された例外のための共通の親が存在しない理由のために:
は、彼らはあなたが明示的にそれぞれ1を処理します。
自分でメソッドを記述してみて、このメソッドでチェック例外をスローしました。その場合、メソッドのユーザーがこの例外のコードを使ってこの例外を明示的に処理することを期待します(例外を処理する関数のユーザーについて気にしなかった場合は、実行時例外がスローされます)。
したがって、チェック例外の考え方は、関数の作成者とユーザーの間の契約であり、ユーザーはこの例外を処理する必要があります。
...または少なくともJava 7マルチキャッチで明示的に名前を付けること。それは理にかなっている。 http://www.oracle.com/technetwork/articles/java/java7exceptions-486908.html – Atom
私はあなたがすでにchecked vs non-checked exceptionsについて考えていることを期待しているので、非常に正確な答えをあなたに伝えようとします。 今すぐあなたの質問に来て、答えはRuntimeExceptionも例外であるので、論理的にも設計上の賢明にも簡単です。 JavaがOOPの原則であることはわかっているので、ここでは基本的に継承です。実行時例外は、親からの例外処理動作をオーバーライドしたこととは別に、Exceptionクラスにあるすべての機能を備えており、未チェックの動作です。チェックされた例外とチェックされていない例外は、ハンドリングの方法が異なりますが、JavaのExceptionであることの残りのプロパティは両方で同じです。だから私は簡単なOOPsの設計(継承の原則)と2つの間の関係は論理的に正しいと言うでしょう。
Exception
とError
クラスで同じことを観察することができます。ここでJavaでこれらの2つの意味について話す場合、例外は回復または処理できるものですが、エラーは回復できないものです。エラーから回復するには、アプリケーションを再起動する必要があります。しかし、もう一度、両方ともThrowable
クラスを継承していることがわかります。なぜなら両方とも同じプロパティを持ち、両方が投げられる可能性があるからです。ハンドリングが異なります。一方は処理できない一方、他のオブジェクトは処理できないという理由で、Exception hierarchy
その他はError hierarchy
です。あなたのquestioin用SO
、私はそのOOPSデザインは、RuntimeExceptionが、私はJavaでの例外の開発者であったとしても、論理的に正しいExceptionクラスから継承していると言うだろうし、私も設計している必要がありますこれらのクラスは既に同じ方法で行われています。
希望あなたの質問に答えているかもしれません。
+1努力していますが、ExceptionとRuntimeExceptionが表示されたツリー上の場所を切り替えることができなかった理由は正確には解りません。理論的には、チェックされた例外処理の動作をオーバーライドするRuntimeExceptionの代わりに、RuntimeExceptionのサブクラスとしてのExceptionは親に対して「チェックされた」動作を追加するだけでよい。 – Atom
@Atom ,,,私は今あなたの質問を持っているので、私たちは親としてRuntimeExceptionを持っている場合、論理的にはすべての子クラスもランタイムでなければならないが、次にコンパイル時に扱わなければならないIOExceptionのようなチェック例外しかし、もしExceptionクラスが親クラスであれば、すべての子クラスも例外の型であると言われていますが、コンパイル時(コンパイル時)またはアンチェック(実行時)のどちらでもかまいません。 – pbajpai21
のJavaは、compiled and interpreted
言語
- ジャワ代わりにバイトコードを実行するために実行で
JVM
によって解釈されなければならないcompilation
時間 - で中間
byte code
からcompiled
されます。
これは、チェックされた理由とチェックされていない例外についてコンパイルしていないため、interpreted
(ここではチェックされていない例外が発生します)部分が表示されません。 Javaので
Javaの例外階層
Unchecked
例外は(私達はちょうど約Exception
階層を語る)、それらの例外その取り扱いNOT verified during Compile time
です。これらの例外は、プログラミングが悪いために発生します。プログラムはコンパイルエラーを出さないでしょう。 Unchecked
の例外はすべて、の直接サブクラスです。RuntimeExceptionクラスです。
上記の図が正しいことを知っていますが、ExceptionとRuntimeExceptionの場所を切り替えると、チェックされていない動作がより論理的に見えます。 – Atom
@Atom 'RuntimeException'を' Exception'に置き換えた場合、 'runtime' **スーパークラスがある場合はスーパークラスが意味のある名前でなければなりません。 'Exception'サブクラスを持つことができますが、ここでは' Exception'の動作があります。なぜなら、あなたがカスタム例外を作成した場合のその良い習慣が 'classname'の後に' exception'を追加する理由です – Hosseini
APIを設計しながら、開発者が考慮すべての条件を取る必要があります。 Exceptionは、プログラムの実際のフローからの逸脱とみなされます。だから彼ら(Java APIの設計に携わった開発者)は条件を異なるカテゴリに分けました。コンパイル時に処理できるものと開発者は、このAPIを使用している人にコンパイル時にのみ処理させる必要があります。 (実行時間/チェックされていない例外)と処理できないもの(エラー)を実行時に処理する必要があります。
たとえば、ファイルをアップロードする必要があるというアプリケーションを設計しています。私たちはJAVAを使用しています。この場合、ファイル入力ストリームを使用して、アップロード/ダウンロードする必要があるファイルのパスを指定することができます。開発者はファイル入出力ストリームスローファイル例外としてJava事前定義ファンクション(ファイル入出力ストリーム)を使用したため、コンパイラはコンパイル時にそれらを処理するようになりました。このアプリケーションのエンドユーザーファイルをアップロードしようとしていますが、利用できないパスや間違ったパスを与えた場合、その例外が発生し、ファイルが利用できないというメッセージを提供して処理すると、エンドユーザは簡単に処理できます。ここで、ユーザーが電卓アプリケーションを使用していると仮定すると、開発者は実行時に処理しようとするエンドユーザーの種類を認識しません。または無限大の場合は、算術例外が発生するので、値がサブミットされた後に実行時に入力自体が変更され、分割操作が行われます。
- 1. SONARはExceptionまたはRuntimeExceptionを拡張しますか?
- 2. C++の例外:なぜstd :: exceptionを使用または拡張するのですか?
- 3. 構造体を拡張するための特性以外の方法はありますか?
- 4. オブジェクトが拡張可能なエラーではありません
- 5. 内部クラスが外部クラスのスーパークラスを拡張するのはなぜですか?これを行う方法はありますか?
- 6. なぜK&Rは&&、||を作ったのですか?論理と&、|ビットごとに、それ以外の方法はありませんか?
- 7. "クラスにはデフォルトコンストラクタはありません"なぜそれが必要ですか?
- 8. なぜそれがコンソールではありません。
- 9. なぜ私はそんなに遅れがありますか?
- 10. 英数字によるリクエストごとにAliasMatchを行う方法はありますが、それ以外の方法はありません。
- 11. memcacheの拡張機能がありません - インストール方法は? MAMP 4.2
- 12. mbstring拡張子がありません
- 13. UITextFieldDelegate拡張関数がトリガしません、なぜですか?
- 14. なぜ私は拡張メソッドを呼び出せませんか?
- 15. タスクが開始することがありますが、時にはそれはなぜですか?それを変更する方法はありますか?
- 16. それ以外の場合はnull SQLパラメータを安全にする方法はあまり冗長ではありませんか?
- 17. 拡張メソッドをインポートする必要があるのはなぜですか?この質問は、角-2特異的ではありませんが
- 18. Beautifulsoup4はテキストを解析しません。ループの中にあれば、それは1つの外側にあります。それはなぜですか?
- 19. SilverlightのListのFind拡張メソッドはありませんか?
- 20. なぜ私の悪用がperlで動作するのですか?それはPythonではありません
- 21. 私の拡張ステートメントはなぜ機能しませんか?
- 22. メソッドが見つかりませんでしたが、clojure.reflectorにそれ以外の場合があります
- 23. ArrayList拡張のキャストオブジェクトにはメソッドがありません
- 24. クライアント以外のGWTクラスを拡張する方法
- 25. WordPressのJetPackはそれを解決する方法はありませんか?
- 26. Solrj RuntimeException:最初のタプルはメタデータタプルではありません
- 27. 以下はなぜそれが何をするのですか?
- 28. プライベートクラスへのコンパニオンオブジェクト:なぜそれは有効ではありませんか?
- 29. Androidタブレットエミュレータが遅いのはなぜですか?それをスピードアップする方法はありますか?
- 30. RuntimeException:クラスフラグメントを拡張するエラー
例外は**すべての**例外のスーパークラスです – Li357
これは私がJavaの設計者がそれを設計したのでこの方法で設計されました – ControlAltDel
Andrew、はい、私は尋ねますなぜRuntimeExceptionはありませんか? @ControlAltDelはい、私は彼らがこのように設計した理由を尋ねます。 – Atom