の違いとthrow
、いつどちらを使用するかを説明できる人はいますか?throws
Throwable
8 に答える
throws
: メソッドを記述するときに、問題のメソッドが指定された (チェックされた) 例外をスローすることを宣言するために使用されます。チェック例外とは対照的に、ランタイム例外 (NullPointerExceptions など) は、メソッドを宣言しなくてもスローされる場合があります
throws NullPointerException
。throw
: 実際に例外を投げる指示。(より具体的には、Throwable )。throw キーワードの後には
Throwable
(通常は例外) への参照が続きます。
例:
Throwable
: 独自のカスタムのスロー可能なクラスを作成するために拡張する必要があるクラス。
例:
throw
: truet
でなければならないオブジェクトをスローするステートメント。t instanceof java.lang.Throwable
throws
throw
: そのメソッドによってチェックされた例外 nを指定するためのメソッド シグネチャ トークン。java.lang.Throwable
: スロー (およびキャッチ) できるすべてのオブジェクトの親タイプ。
これは実にわかりやすい。
java.lang.Throwable : _
この
Throwable
クラスは、Java 言語のすべてのエラーと例外のスーパークラスです。このクラス (またはそのサブクラスの 1 つ) のインスタンスであるオブジェクトのみが、Java 仮想マシンによってスローされるか、Javathrow
ステートメントによってスローされる可能性があります。同様に、このクラスまたはそのサブクラスの 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
宣言する必要がないものです。これは、例外の使用の側面としては別の話です。
throw - 例外をスローするために使用されます。throw ステートメントには、単一の引数が必要です: スロー可能なクラス オブジェクト
throws - これは、メソッドが例外をスローできることを指定するために使用されます
Throwable - これは、Java 言語のすべてのエラーと例外のスーパークラスです。Throwable クラスから派生したオブジェクトのみをスローできます。throwable には、作成時のスレッドの実行スタックのスナップショットが含まれています
Throw
例外をスローするために使用されますthrows
(私が正しく推測した場合) は、メソッドが特定の例外をスローできることを示すために使用され、Throwable
クラスは Java のすべてのエラーと例外のスーパークラスです。
上記と同じ答えですが、コピーアンドペーストの喜びがあります:
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;
}
}