質問

知っている

throw new Exception();

完全な stackTrace などが作成されるため、かなり大きなオーバーヘッドが発生します。
する

throw new Throwable();

同じ問題が発生していますか?この動作は継承されているのでしょうか、それとも Throwable をスローする方がオーバーヘッドが小さい (いいえ) のでしょうか?

編集
から アナリスト 観点から見ると、ユーザーが間違ったパスワードを入力することは、プログラムの通常の実行順序の例外です。それで、私が持っている場合:

public Session newSession() {  
  validate_user_and_password();   
}

UserNotValidException をスローすることは、正しく聞こえるでしょう。 アナリスト 視点。
戻る null または 0 コードがかなり優れた抽象化を持っている場合は、正しくないと思われるだけです。これを実際にコードで実装できるかどうか、それとも理論に任せる必要があるのか​​を知りたかっただけです。

プログラミングの観点からの例外とアナリストの観点からの例外には大きな違いがあります。

注記:非常に単純でばかげた例を挙げましたが、これは私の場合にはまったく当てはまりません。
注2:戻ってくるのはわかっています null これは普通のことですが、適切に抽象化された OO コードが必要です。個人的には、これに害はないと思います。

他のヒント

いいえ、あなたはその影響を避けるために、独自のサブクラスを必要とします。

Exception ex = new Exception() {
    @Override public Throwable fillInStackTrace() {
        return this; // and do nothing else
    }
};

このは(実際には、スタックトレースを埋めるためにfillInStackTraceに例外デリゲートの作成)スタックトレースを記入しないであろう例外のインスタンスを作成し、作成するために、安価なことである。

あなたは決して投げていないか、例外の適用範囲があまりにも素晴らしいですThrowable.をキャッチする必要があります。

例外的な状況では、それらを生み出した状況に特異的であるべきである。先に述べたように、

は、例外が必要な場合、すなわち、のみ使用してください。余談という、Throwableをキャッチすることは、OutOfMemoryExceptionなどの例外のホストを意味します。この大きさのエラーは、(容易)から回収することができず、現像剤によって処理されるべきではない。

Throwableは例外の親クラスです。そうException classThrowableから継承されます。

Throwableを対例外

Javaの例外

として@mangoDrunkは言った: "Throwableを例外とエラーのスーパークラスである"

2 つのクラスのソース コードを見ると、次のことがわかります。 Exception 同じコンストラクターを公開すること以外は何もしません。 Throwable. 。肉のすべて、したがって頭上にあるものはすべて、 Throwable.

たとえ Exception 追加のオーバーヘッドが導入されましたが、これを使用すると明らかに過剰な最適化になります Throwable その代わり。作業に適したツールを使用してください。軽いからといって間違ったツールを採用しないでください。

それは同じオーバーヘッドですので、

java.lang.Exceptionは、java.lang.Throwableを拡張します。 のJavadocするます:

  

Throwableクラスは、Java言語のすべてのエラーと例外のスーパークラスです。このクラス(またはそのサブクラスの1つ)のインスタンスであるオブジェクトだけがJava仮想マシンによってスローされるか、Javaのthrow構文によってスローされます。同様に、これだけのクラスまたはそのサブクラスの1つは、catch節での引数の型を指定できます。

     

2つのサブクラスのインスタンス、エラーや例外、従来は例外的な状況が発生したことを示すために使用されています。 (そのようなスタックトレースデータなど)関連情報を含むように、典型的には、これらのインスタンスは、新たに例外的な状況のコンテキストで作成されています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top