0
  1. 例外が発生する一般的な理由は何ですか? 例外が発生した場合、プログラムはすぐに終了しますか、それとも実行を続けますか?

  2. @try は、テストしているプログラム メッセージだと思います。そうですか?

  3. @catch がエラー メッセージを記録したり、クリーンアップしたりした後、@finally ブロックは何をしますか? 私が読んでいる本によると、@try 内のステートメントが例外をスローするかどうかは @finally によって決定されます。しかし、これは不必要なステップではないでしょうか? プログラムが突然終了したことに基づいて例外が発生したかどうかを確認できるためです。

  4. throw ディレクティブとは何ですか? 本によると、独自の例外をスローできるようになります。しかし、それは本当に紛らわしいと思います。それは、どういうわけか例外を作成してテストできるということですか?

質問の少なくとも 1 つに答えていただければ幸いです。ありがとうございました。

4

2 に答える 2

1

{}実行時エラー メッセージを生成する可能性のあるコード ブロック (文字間) があることを理解してください。多くのシステムでは、ランタイム エラー メッセージがログに送信されて無視されるか、アプリケーションが突然終了します。

例外では、エラーを検出したコードが例外オブジェクトを作成し、それをthrowステートメントまたはメソッドで "スロー" します。

例外が処理されない場合、mainレベルまで「バブル」し、アプリが終了します (通常、デフォルト ハンドラーがメッセージを出力した後など)。

ただし、コードのブロックを句にすることができます(または の前に orをtry配置することにより)、その句の後に句を追加すると、例外が発生したときに、制御が句の先頭に転送されます。try@try{catchcatch

句は、例外オブジェクトを見て、それcatchをどうするかを決定できます。実装は少し異なりますが、通常、catch句が何もしない場合、例外は無視され、try/catch句の後に実行が続行されます。一方、catch句が何らかの方法で例外を「処理」できない場合(したがって、例外を無視してはなりません)、catch句は athrowを実行して、元の例外または新しく作成された例外を再スローします。

例外が特定の範囲で処理されない場合、そのメソッドまたはその呼び出し元try/catchの次の outer に「バブルアップ」されます。try/catch最終的に未処理の例外が到達mainし、デフォルト ハンドラーが制御を取得します。

finallyほとんどの例外処理モデルの機能であり、重要な機能ではありませんが、非常に便利です。try/catch例外を生成せずに範囲を実行すると、finally句が実行され、句の後に実行が続行されfinallyます。一方、try/catch範囲内で例外が発生し、処理されない場合は、finally句が実行され、次のコードを実行せずに例外が「バブルアップ」されます。

finallyたとえば、開いているファイルを閉じたり、割り当てられた一時リソースを解放したりするために使用できます。

于 2013-04-09T21:20:11.090 に答える