58

の違いとthrow、いつどちらを使用するかを説明できる人はいますか?throwsThrowable

4

8 に答える 8

88
  • throws : メソッドを記述するときに、問題のメソッドが指定された (チェックされた) 例外をスローすることを宣言するために使用されます。

    チェック例外とは対照的に、ランタイム例外 (NullPointerExceptions など) は、メソッドを宣言しなくてもスローされる場合がありますthrows NullPointerException

  • throw: 実際に例外を投げる指示。(より具体的には、Throwable )。

    throw キーワードの後に​​はThrowable(通常は例外) への参照が続きます。

例:

ここに画像の説明を入力


  • Throwable: 独自のカスタムのスロー可能なクラスを作成するために拡張する必要があるクラス。

例:

ここに画像の説明を入力


于 2010-10-15T07:55:43.763 に答える
9
  • throw: truetでなければならないオブジェクトをスローするステートメント。t instanceof java.lang.Throwable
  • throwsthrow: そのメソッドによってチェックされた例外 nを指定するためのメソッド シグネチャ トークン。
  • java.lang.Throwable: スロー (およびキャッチ) できるすべてのオブジェクトの親タイプ。

例外の使用に関するチュートリアルについては、こちらを参照してください。

于 2010-10-15T07:25:24.120 に答える
6

これは実にわかりやすい。

java.lang.Throwable : _

このThrowableクラスは、Java 言語のすべてのエラーと例外のスーパークラスです。このクラス (またはそのサブクラスの 1 つ) のインスタンスであるオブジェクトのみが、Java 仮想マシンによってスローされるか、Java throwステートメントによってスローされる可能性があります。同様に、このクラスまたはそのサブクラスの 1 つだけが catch句の引数の型になることができます。 もっと

throwsというキーワードはメソッド宣言で使用され、このメソッドからどのような種類の例外 [Throwable class] が期待されるかを指定します。

キーワードthrowは、Throwable クラスのインスタンスであるオブジェクトをスローするために使用されます。


いくつかの例を見てみましょう:

例外クラスを自分で作成します

public class MyException super Exception {

}

例外クラスからオブジェクトを作成し、キーワードthrowを使用してそれをスローするメソッドを作成します。

private  void throwMeAException() throws MyException //We inform that this method throws an exception of MyException class
{
  Exception e = new MyException (); //We create an exception 

  if(true) {
    throw e; //We throw an exception 
  } 
}

method を使用するthrowMeAException()場合、何かをスローするという情報があるため、特定の方法で処理する必要があります。この場合、3 つのオプションがあります。

最初のオプションは、ブロックの try と catch を使用して例外を処理することです。

private void catchException() {

   try {
     throwMeAException();
   }
   catch(MyException e) {
     // Here we can serve only those exception that are instance of MyException
   }
}

2番目のオプションは、例外を渡すことです

   private void passException() throws MyException {

       throwMeAException(); // we call the method but as we throws same exception we don't need try catch block.

   }

3 番目のオプションは、例外をキャッチして再スローすることです

private void catchException() throws Exception  {

   try {
     throwMeAException();
   }
   catch(Exception e) {
      throw e;
   }
}

再開すると、いくつかのアクションを停止する必要がある場合、try-catch ブロックによってサーバーではないまで戻る例外をスローできます。例外をスローするメソッドを使用する場合はどこでも、try-catch ブロックで処理するか、メソッドに宣言を追加する必要があります。

この規則の例外は、java.lang.RuntimeException宣言する必要がないものです。これは、例外の使用の側面としては別の話です。

于 2010-10-15T08:06:45.287 に答える
2

throw - 例外をスローするために使用されます。throw ステートメントには、単一の引数が必要です: スロー可能なクラス オブジェクト

throws - これは、メソッドが例外をスローできることを指定するために使用されます

Throwable - これは、Java 言語のすべてのエラーと例外のスーパークラスです。Throwable クラスから派生したオブジェクトのみをスローできます。throwable には、作成時のスレッドの実行スタックのスナップショットが含まれています

于 2010-10-15T07:21:36.297 に答える
1

Throw例外をスローするために使用されますthrows(私が正しく推測した場合) は、メソッドが特定の例外をスローできることを示すために使用され、Throwableクラスは Java のすべてのエラーと例外のスーパークラスです。

例外をスローする方法

于 2010-10-15T07:21:25.940 に答える
-1

上記と同じ答えですが、コピーアンドペーストの喜びがあります:

public class GsonBuilderHelper {
    // THROWS: method throws the specified (checked) exception
    public static Object registerAndRun(String json) throws Exception {

        // registering of the NaturalDeserializer
        GsonBuilder gsonBuilder = new GsonBuilder();
        gsonBuilder.registerTypeAdapter(Object.class, new NaturalDeserializer());
        Gson gson = gsonBuilder.create();

        Object natural = null;
        try {
            // calling the NaturalDeserializer
            natural = gson.fromJson(json, Object.class);
        } catch (Exception e) {
            // json formatting exception mainly
            Log.d("GsonBuilderHelper", "registerAndRun(json) error: " + e.toString());
            throw new Exception(e);  // <---- THROW: instance of class Throwable. 
        }
        return natural;
    }
}
于 2015-03-04T16:45:34.190 に答える