今日、Hadoop のソース コードを見ていて、最近取り組んでいたシステムのことを思い出しましたが、多くの例外処理メソッドが間違っており、依然として従来の例外処理メソッド (つまり、return を使用する) に従っていることに気づきました。プログラム内の異常な状況を識別するための値)。 Hadoop の多くのメソッドの宣言は例外をスローしますが、私のシステムの多くのメソッドの宣言は例外をスローしません。異常事態を検出してエラーメッセージを出力するだけで、例外はスローしません。
org.apache.hadoop.hdfs.protocol パッケージの Block クラスの readFields() メソッド:
public void readFields(DataInput in) throws IOException { this.blockId = in.readLong(); this.numBytes = in.readLong(); this.generationStamp = in.readLong(); if (numBytes < 0) { throw new IOException("Unexpected block size: " + numBytes);//抛出异常,要是的话就不会抛出,而只是System.out.println错误提示, }
1。メソッド宣言名に throws 例外がある場合、メソッド本体は throw する必要はありません。例外。なぜなら、メソッド宣言に例外の説明を含めることはできますが、実際に例外をスローすることはできないからです。これを行う利点は、最初に例外用の場所が確保され、後で既存のコードを変更せずにこの例外をスローできることです。この機能は、派生クラスまたはインターフェイス実装クラスがこれらの事前に宣言された例外をスローできるように、抽象基本クラスとインターフェイスを定義するときに重要です。
2. 一部のメソッド宣言にはスローがないのに、メソッド本体では例外がスローされるのはなぜですか? RuntimeException から継承された例外は、例外の説明をスローせずにスローできます。実行時例外 (未チェック例外とも呼ばれます) の場合、コンパイラーは例外指定を必要としません。 RuntimeException タイプの例外 (およびそのサブクラス) は、コード内でのみ無視できます。他のタイプの例外の処理はコンパイラによって強制されます。その理由は、RuntimeException がプログラミング エラーを表すためです。
3. ランタイム例外は Java 仮想マシンによって自動的にスローされます。
例外処理の基本
1.1 System.out.println は高価です。 System.out.println を呼び出すと、システムのスループットが低下します。
1.2 運用環境では異常な printStackTrace() メソッドを使用しないでください。 printStackTrace はデフォルトでコールスタックをコンソールに出力しますが、運用環境でコンソールにアクセスするのは現実的ではありません。
例外処理の基本原則
2.1 例外を処理できない場合は、例外をキャッチしないでください。
2.2 キャッチしたい場合は、例外のソースの近くでキャッチする必要があります。
2.3 キャッチした例外を飲み込まないでください。
* (これはキャッチされた例外ですが、何も行いません)
2.4 例外を再スローしたくない場合は、例外をログに記録します。
2.5 例外が再パッケージ化されてから再スローされる場合、statck トレースを出力しません。
2.6 例外をスローする必要があるたびに java.lang.Exception をスローする代わりに、カスタム例外クラスを使用します。メソッドの呼び出し元は、スローを通じてどの例外を処理する必要があるかを知ることができるため、自己記述的になります。
2.7 ビジネス ロジックを作成する場合、システムは、エンド ユーザーが修復できないエラーに対して未チェックの例外をスローする必要があります。他の開発者が使用できるサードパーティ パッケージを作成する場合、システムは修復できないエラーに対して未チェックの例外をスローする必要があります。チェックされていない例外をスローします。チェックされた例外を使用します。
2.8 throws ステートメントを書くと使いにくくなるので、チェックする必要がある例外は必ず宣言してください。
2.9 アプリケーションレベルのエラーまたは修復不可能なシステム例外が未チェックの例外とともにスローされます。
* (これはエラーであることに注意してください。つまり、構成ファイルのエラーなど、修復できないことを意味します)
2.10 例外の粒度に従ってメソッドを整理します
関連する推奨事項:
以上がJava例外処理の基礎と基本原則の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。