2017-10-08 5 views
-3

戻り例外と例外をスローする違いを説明してください。例外がJavaで返される

いくつかのプログラムは、新しいIOException()を返し、新しいIOException()をスローします。なぜ私たちはreturn文を使用するのですか?その瞬間に、上記のreturn文を含むメソッドは実行を停止しますか?

+7

あなたは返さなく、スローされた例外を見てきたときの完全な例を示してください –

答えて

0

投げ例外は何かが間違っていることを意味し、実行を試してみる必要があります。そうしないと、スレッドが停止します。

一方、例外を返すと何も間違っていないことを意味します。他のオブジェクトと同様にオブジェクトを作成するだけです。例外が発生したことをプログラムに知らせるには、その例外オブジェクトをスローする必要があります。

たとえば、Device is not readyのような例外が欲しいとしましょう。今、あなたは説明してください

public void checkFile() { 
    if(...check device status is not ready ...) { 
    throw getMyException();// or you could use any built-in ex like new IOException("...."); 
    } 
} 
1

、あなたがそのメソッドを呼び出すと、以下のような例外をスローする必要があることexceptionを利用するために、このよう

public Exception getMyException() { 
    return new Exception("Device is not ready yet."); 
} 

をその例外を作成する方法を保つことができますreturn例外と例外をスローする間の違い。

違いはこれです:例外をスロー

  • は行うには、通常のものです。それは制御の流れを変える。

  • 例外を返すことは合法ですが、珍しいことです。コントロールの流れは変わりません。

1 - ... 任意のreturn声明がこれを行うという意味で除きます。 JCPは、文の実行について、通常またはが完了したら、を完了します。詳細が必要な場合は、JLS 14.1とお読みください。しかし


....

return new SomeException(...); 

は....行うにはかなり怪しげなものです。私が考えることができる唯一の合理的なユースケースは、あなたのコードが複数のエラーにフラグを立てるためにこれらの例外オブジェクトを使用していて、何か他のものが収集して報告している場合です。 エラーが検出された場所のスタックトレースをキャプチャする必要がある場合は、これを実行します。しかしそうでない場合、このような例外を使用することは単に醜い非効率的です。私たちがreturn文を使用する理由


、その瞬間にreturn文の上に含まれる方法は、実行を停止しているのですか?

例外を返すことは、他の値を返すことと同じです。それは実行を停止しません。


これを行う(実際の)アプリケーションコードの例を示した場合は、説明することができます。

+0

Demoクラス{ \t公共の静的な無効メイン(文字列引数[]){メソッド();} \tのpublic static int型のメソッド() {\t \t return 5;} \t } このプログラムについてconciderを実行すると、method()は値を5として返し、method()の実行を停止します。 クラスDemo {public static void main(string args []){メソッド();}パブリックstatic IOExceptionメソッド(){try new IOException();} finally {return new IOException();}}} しかし、このケースでは、最初のreturn文についてconciderを実行すると、IOExceptionオブジェクトが返され、method()の実行を停止する必要がありますが、finallyが実行されるため、method()の実行は停止しません。 –

+1

1)質問にあなたのコードを入れてください。 「編集」リンクを使用してください!!あなたのコードはコメントの中でほとんど読めません。 2)それは私が求めていた**実用**アプリケーションの種類ではありません。それはちょうどおもちゃの例です。 3a)いいえ、そうすべきではありません。 3b)それはJavaが動作する方法ではないからです! –

関連する問題