25

ランタイム例外とは何ですか?チェックされた/チェックされていない例外とは何ですか?エラー/例外の違いなぜこれらの多くのタイプですか?代わりに、Javaは単純な設計(すべてのタイプを試して/キャッチするだけ)に従って、プログラムの異常な状態を処理することができますか?

4

8 に答える 8

41

私は新しいJava開発者なので、さまざまな種類の例外を区別して処理するのにもいくつかの困難に直面しています。だから私はこのトピックについて短いメモを書きました、そして私が混乱するときはいつでも私はそれを通り抜けます。これは、Throwableクラス階層のイメージです。
スロー可能なクラス階層

[ JavaTpointの画像提供]。

ここで覚えておくべき3つの重要なクラスがあります:Throwable、、。これらのクラスには、「チェックされた例外」と「チェックされていない例外」の2つのタイプに分類できます。ExceptionErrorException

チェックされた例外:

  • これらは、とを除いて拡張するクラスThrowableです。RuntimeExceptionError
  • これらはコンパイル時にチェックされるため、コンパイル時例外とも呼ばれます。つまり、コンパイラはそれらを処理するかtry/catch、関数シグネチャでthrowsそれらを指定し、呼び出し元で処理するように強制します。
  • これらはプログラムで回復可能な問題であり、コードの制御外の予期しない状態(データベースのダウン、ファイルI / Oエラー、誤った入力など)によって引き起こされます。
  • 例:、、 IOExceptionなどSQLException

未チェックの例外:

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

エラー:

  • Errorによって処理されていない回復不能な状況を指しtry/catchます。
  • 例: OutOfMemoryError、、、VirtualMachineErrorなどAssertionError

なぜこれらの多くのタイプですか?

Stephen Cの答えに加えて、私が言いたいのは、例外処理はJavaでは比較的コストのかかる操作です。すべての例外的な状況をブロックに入れるべきではありません。try/catchsを過度に使用すると、try/catchプログラムのパフォーマンスが低下する可能性があります。

結論として、Exceptionsは可能な限りプログラムで処理する必要があります。一方、Errorsは処理できないため、多くの種類の例外が存在する論理的な理由である可能性があります。

于 2015-01-04T08:43:38.617 に答える
38

Throwableは、すべての例外の最上位にあります。Throwableの下には、エラーと例外があります。例外の下にRuntimeExceptionがあります。

Javaには、チェックされているものとチェックされていないものの2種類の例外があります。チェックされた例外はコンパイラーによって強制されます(throws節でそれらを宣言し、最終的にキャッチする必要があります)。チェックされていない例外は、throws節でキャッチまたは宣言するために強制されません。

(答えの物議を醸す部分)

Throwableは、すべての例外タイプの親が存在するように存在します。Throwableを投げたり、キャッチしたりしないことを宣言しないでください(自分が何をしているのかを本当に本当に知っている場合を除きます)。

エラーは、ランタイム環境の問題を示すために存在します。たとえば、クラスファイルの形式が正しくない、VMのメモリが不足しているなど、プログラムが回復できない可能性があります。自分が何をしているのかを本当に理解していない限り、エラーをキャッチするべきではありません。

ディスクがいっぱいであるためにファイルを作成できないなど、プログラマー以外のすべてのエラーのルートとして例外が存在します(これに対する「例外」についてはRuntimeExceptionを参照してください)。例外をスロー、スロー、またはキャッチしないでください。例外をキャッチする必要がある場合は、自分が何をしているのかを確認してください。

RuntimeExceptionは、配列の終わりを超えたり、nullオブジェクトのメソッドを呼び出したりするなど、すべてのプログラマーエラーを示すために存在します。これらは、例外をスローしないように修正する必要があるものです。これは、プログラマーであるあなたがコードを台無しにしたことを示しています。繰り返しますが、自分が何をしているのかを知らない限り、これらを捕まえるべきではありません。

于 2010-07-02T02:22:22.433 に答える
4

TofuBeerの答えは、例外クラスの意味を明確に説明しています。

なぜこれらの多くのタイプ?代わりに、Javaは単純な設計(すべてのタイプを試して/キャッチするだけ)に従って、プログラムの異常な状態を処理することができますか?

なんで?必要だから!これらの4つのクラスがないと、幅広いカテゴリで例外を処理することは現実的ではありません。

  • Errorクラスなしで「すべての致命的なJVMエラー」をどのようにキャッチしますか?
  • Exceptionクラスなしで「JVMの致命的なエラーではないすべての例外」をどのようにキャッチしますか?
  • RuntimeExceptionクラスなしで「すべてのチェックされていない例外」をどのようにキャッチしますか?
于 2010-07-02T06:49:28.570 に答える
1
  • エラー(VMによってスローされ、キャッチまたは処理されるべきではありません)
    1. VMエラー
    2. アサーションエラー
    3. リンケージエラー...など
  • ランタイム/例外のチェックを外します(プログラミングエラー、キャッチまたは処理しないでください)
    1. NullPointerException
    2. ArrayIndexOutOfBoundException
    3. IllegalArgumentException...など
  • 例外をチェックします(それ以外の場合、アプリケーションはキャッチまたは処理されることが期待されます)
    1. IOException
    2. FileNotFoundException
    3. SQLException...など
于 2015-08-31T08:47:48.283 に答える
0
于 2018-09-04T14:28:36.347 に答える
0

この記事では、チェックされた例外とチェックされていない例外を明確かつ簡潔に要約しています。

  • チェックされた例外チェックされた例外は、コンパイル時に検出、識別、およびチェックできる例外です。コードブロックがチェックされた例外をスローする場合、メソッドは例外を処理するか、throwsキーワードを使用して例外を指定する必要があります。

    • public void testDB() throws ClassNotFoundException, SQLException
      {
          Class.forName("com.mysql.jdbc.Driver");
          System.out.println("Driver Loaded");
          Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/selenium","root","root");
          System.out.println("Connected to MySQL DB");
      }
      
    • try-catch{}スローを使用して例外のリストを指定するか、ブロックを使用する必要があります。throws以下のプログラムでの使用法を示しました。

  • 未チェックの例外未チェックの例外は、コンパイル時にチェックされません。ErrorおよびRuntimeExceptionクラスの下のJava例外はチェックされていない例外であり、 throwableの下の他のすべてがチェックされます。

概要:クライアントが例外から回復することが合理的に期待できる場合は、それをチェック済みの例外にします。クライアントが例外から回復するために何もできない場合は、チェックされていない例外にします。

于 2019-07-18T13:58:30.130 に答える
-1

ランタイム例外は、例外をキャッチして宣言することを回避する柔軟性を提供します。

于 2010-07-02T12:55:23.333 に答える
-2
Exceptions are two types in java:

1. **Checked Exception: The exceptions which are checked by compiler. 

例:ファイルを使用して操作を実行している場合、コンパイラーは、try-catchブロックまたはthrowsキーワードのいずれかによってIOExceptionを処理するように要求します。

2. Unchecked Exception: The exceptions which are not checked by compiler at run time. 

例:オブジェクトを作成せずに操作を実行している場合。この場合、NullPointerExceptionが発生します。

于 2019-07-19T17:16:37.243 に答える