Javaの例外は、チェックされた例外とランタイム例外の2つのカテゴリに分けられます。チェックされた例外は、コンピレーション段階で処理できる例外です。
チェックされた例外とランタイム例外の違いと接続
一般的な例外クラス
いくつかの一般的なランタイムの例外をリストします。
いくつかの非推定の例外をリストします(チェックされた例外):
エラー
エラーとは、一般に、システムのクラッシュ、仮想マシンエラー、動的リンク障害などの仮想マシンに関連する問題を指します。このエラーは回復できないか、キャプチャできないため、アプリケーションの中断を引き起こします。通常、アプリケーションはこれらのエラーを処理できないため、プログラムはキャッチを使用してエラーオブジェクトをキャッチしようとしないでください。メソッドを定義するときにエラーオブジェクトをスローする必要はありません。
チェックされた例外の使用
前述のように、チェック済みは明示的に処理する必要があります。そうしないと、ファイル入力ストリームの宣言など、コンパイルエラーが報告されます。
fileInputStream fis = new fileInputStream( "test.md");
このコードにはエラーがまとめられます
未処理の例外タイプfilenotfoundexception
したがって、それは明示的に処理する必要があり、一般に、チェックされた例外を処理する2つの方法があります。
それを処理する方法を知っている場合は、try ... catch ... block処理を使用するのが最善です:
//チェックされた例外を明示的に処理する必要があります{fileinputStream fis = new fileinputStream( "test.md");} catch(filenotfoundexception e){e.printstacktrace(); System.out.println( "ファイルは存在しません!");}それに対処する方法がわからない場合は、メソッドを投げて、以前の発信者によって処理します。
public static void main(string [] args)throws filenotfoundexception {// checked例外を明示的に処理する必要があります//例外はメイン方法でスローされ、処理のためにJVMに引き渡されます。例外を処理するJVMの方法は、トレーススタック情報を印刷し、プログラムを終了してFileInputStream fis = new FileInputStream( "test.md");}を実行することです。スローを使用して、自分で例外をスローします
時には、ビジネスのニーズに応じて、私たちは自分でプログラムの例外を投げかけるでしょう。たとえば、読み取りファイルのコンテンツが空の場合、これは例外だと思います。この時点で、Throwを使用して例外を積極的に投げてキャッチできます。
//スローを使用して積極的にスロー例を挙げてみてください{fileInputStream fis = new fileInputStream( "test.md"); if(fis.read()== 0){new ioException( "empty file"); }} catch(ioException e){e.printstacktrace();}スロースローがランタイムの例外を投げた場合、プログラムは試してみてください...キャッチ...または無視することができます。
例外チェーン処理
実際のエンタープライズレベルのアプリケーションでは、SQLの例外をユーザーインターフェイスに公開しないなど、上位レベルのアプリケーションに根本的な例外を公開しないことがよくあります。第一に、ユーザーの場合、SQLの例外を見ることは役に立たず、次に悪意のあるユーザーにとっては、根本的な例外を公開することは安全ではありません。
では、根本的な例外をブロックする方法は?通常の練習は、プログラムが最初に元の例外をキャッチし、次に新しいビジネス例外をスローすることです。新しいビジネス例外には、ユーザーへの迅速な情報が含まれています。この取り扱い方法は、例外翻訳になります。以下は、ユーザーを作成するプログラムが根本的な例外をブロックする方法を示しています。
//例外チェーンを実証し、ユーザーパブリックvoid createSubscriber(int subid)を作成しますbusinessexception {//ユーザーのロジックを作成します... //例外e){//元の例外を保存... }}プログラムは元の例外を隠し、必要な例外プロンプト情報のみを上向きに提供することがわかります。これにより、基礎となる例外がプレゼンテーションレイヤーに拡張されないようにします。
この種の1つの例外をキャッチし、別の例外をスローし、元の例外情報を保存することは、デザインパターンの責任チェーンパターンと呼ばれる典型的なチェーン処理です。
例外を使用するためのいくつかの提案
いくつかの目標を達成するために例外を使用します。
これらの目標に対処するには、次のようにする必要があります。
1.それに過度に使用したり、頼ったりしないでください。例外は非常に便利ですが、通常のロジックに例外処理を使用しないでください。
//元のコードif(filesize> 100){sysotem.out.println( "ファイルが大きすぎる、もう一度アップロードしてください");継続;} //例外を使用して変更します(filesize> 100){新しい例外をスローします( "ファイルが大きすぎます、もう一度アップロードしてください");} //これを行うことは明らかに無責任です。