35

これはインタビューの質問でした。どちらもキャッチされないため、チェックされていない例外とエラーの主な違いは何ですか? 彼らはプログラムを終了します。

4

8 に答える 8

64

名前で示されているように、チェックされていない例外コンパイル時にチェックされません。つまり、コンパイラは、それらをキャッチしたり、(でthrows)指定したりするメソッドを必要としません。このカテゴリに属する​​クラスについては、セクション11.2JLSの例外のコンパイル時チェックで詳しく説明しています。

チェックされていない例外クラスは、クラスRuntimeException とそのサブクラス、およびクラスErrorとそのサブクラスです。他のすべての例外クラスは、チェックされた例外クラスです。Java APIは、チェックされているものとされていないものの両方で、いくつかの例外クラスを定義します。チェックされているものとされていないものの両方の追加の例外クラスは、プログラマーによって宣言される場合があります。例外クラス階層と、Java APIおよびJava仮想マシンによって定義されたいくつかの例外クラスの説明については、§11.5を参照してください。

次の図は、例外階層を示しています。

代替テキスト

クラスErrorとそのサブクラスは、通常のプログラムが通常回復することを期待されていない例外であり、11.5で説明されているように例外階層

このクラスは、プログラムがイディオムを使用できるようにするために、クラス階層内とは異なる、 Errorの別個のサブクラスです。ThrowableException

} catch (Exception e) {

通常は回復できないエラーをキャッチせずに、回復が可能な可能性のあるすべての例外をキャッチします。

要約すると、回復が可能な例外のチェックさRuntimeExceptionれていない例外のサブセットです(ただし、チェックされていない例外は、ここで回答している多くの例外の同義語ではありません)。RuntimeException

于 2010-04-23T16:09:44.867 に答える
10

JavaDocs はこれらをかなりうまくまとめています。

java.lang.RuntimeException:

RuntimeException は、Java 仮想マシンの通常の操作中にスローされる例外のスーパークラスです。

メソッドは、メソッドの実行中にスローされる可能性があるがキャッチされない可能性のある RuntimeException のサブクラスをその throws 句で宣言する必要はありません。

java.lang.Error:

Error は、Throwable のサブクラスであり、合理的なアプリケーションがキャッチしようとすべきではない重大な問題を示します。このようなエラーのほとんどは異常な状態です。ThreadDeath エラーは、「通常の」状態ですが、ほとんどのアプリケーションがキャッチしようとしないため、Error のサブクラスでもあります。

メソッドの throws 句で、メソッドの実行中にスローされる可能性があるが捕捉されない可能性がある Error のサブクラスを宣言する必要はありません。これらのエラーは決して発生してはならない異常な状態であるためです。

「チェックされていない例外」は単に a の同義語であることに注意してくださいRuntimeException

于 2010-04-23T15:09:07.480 に答える
5

注: RuntimeException は未チェックの例外です

チェックされていない例外は、実行のある時点で発生する可能性があることがわかっているがキャッチされていない例外です。コードを try-catch でラップすることでチェックできますが、これは強制されません (例外が何らかの方法で処理されることを強制するチェック済み例外とは異なります)。

エラーは、実行中の任意の時点で発生する可能性があり、特定のメソッド呼び出しなどによって明示的に発生したわけではないため、実際にはキャッチできないものです。たとえば、OutOfMemoryError や StackOverflowError などです。これらは両方ともいつでも発生する可能性があり、アプリケーションが終了する原因になります。これらのエラーをキャッチしても、回復できない何かが発生したことを示しているため、意味がありません。

于 2010-04-23T15:10:23.497 に答える
3

チェック例外:

  • Throwableclass exceptを拡張し、checked exception と呼ばれるRuntimeExceptionクラス。Error
  • これらのタイプの例外はコンパイル時にチェックされるため、コンパイル時例外とも呼ばれます。つまり、これらの例外を無視すると (try/catchまたはthrow例外で処理されない)、コンパイル エラーが発生します。
  • これらは、コードの制御外の予期しない状況 (データベースのダウン、ファイル I/O エラー、間違った入力など) によって引き起こされる、プログラムで回復可能な問題です。
  • try/catchブロックを使用してそれらを回避できます。
  • :IOExceptionなどSQLException

未チェックの例外:

  • 拡張するクラスRuntimeExceptionは、未チェックの例外として知られています
  • チェックされていない例外は、実行時にチェックされるのではなく、コンパイル時にチェックされません。そのため、「実行時例外」とも呼ばれます。
  • これらはプログラムで回復可能な問題でもありますが、チェック例外とは異なり、コード フローまたは構成の障害が原因です。
  • 例: ArithmeticExceptionNullPointerExceptionArrayIndexOutOfBoundsExceptionなど
  • これらはプログラミング エラーであるため、適切に/賢明にコーディングすることで回避できます。たとえば、「ゼロ除算」が発生しますArithmeticEceeption。単純な if 条件 - でそれらを回避できますif(divisor!=0)。同様にNullPointerException、単に参照をチェックするif(object!=null)か、さらに優れた手法を使用することで回避できます

エラー:

  • Errortry/catch によって処理されていない回復不能な状況を指します
  • 例: OutOfMemoryErrorVirtualMachineErrorなどAssertionError
于 2015-01-04T09:12:14.197 に答える
3

エラーは、発生してはならない根本的な問題を示しています。エラーが発生した場合 本当に悪いことが起こりました。
一方、チェックされていない例外 (実行時例外) は、何らかの理由で例外が予想される場合に使用されますが、それを処理する合理的な方法がないため、try catch ステートメントは煩わしく、スペースの無駄になります。

于 2010-04-23T15:31:09.450 に答える
2

エラー: これらは、アプリケーションの外部にある例外的な状態であり、アプリケーションは通常、予測または回復できません。

実行時例外: これらは、アプリケーションの内部にある例外的な状態であり、アプリケーションは通常、予測または回復できません。

あなたはこれを読みたいかもしれません:

于 2013-12-18T01:44:11.587 に答える
1

RuntimeExceptionsまた、次のようなエラーOutOfMemoryErrorはキャッチする必要はなく、アプリケーションを終了する main() に到達するまでスローできます。

その他の例外がキャッチされていないか、スロー リストに含まれていない場合、コンパイル エラーが発生します。

于 2010-04-23T15:09:54.613 に答える
1

エラーと実行時例外は、まとめて非チェック例外と呼ばれます。

実行時例外は、アプリケーション内部の例外的な状態であり、通常、アプリケーションは予測または回復できません。これらは通常、論理エラーや API の不適切な使用など、プログラミングのバグを示しています。

3 種類の例外について説明しているこのリンクを参照してください。

http://docs.oracle.com/javase/tutorial/essential/exceptions/catchOrDeclare.html

これが役立つことを願っています。

于 2013-01-27T22:10:19.760 に答える