web-dev-qa-db-ja.com

例外処理:throw、throws、Throwable

throwthrows、およびThrowableの違いとその使用時期を説明できますか?

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

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

  • throw:実際に例外をスローする指示。 (より具体的には、Throwable)。

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

例:

enter image description here


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

例:

enter image description here


85
aioobe
  • throw:オブジェクトをスローするステートメントt where t instanceof Java.lang.Throwableは真でなければなりません。
  • throws:そのメソッドによってチェック例外thrownを指定するメソッド署名トークン。
  • Java.lang.Throwable:スロー(およびキャッチ)できるすべてのオブジェクトの親タイプ。

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

9
oksayt

これは本当にわかりやすい。

Java.lang.Throwable

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

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

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


いくつかの例を見てください:

例外クラスを作成します

_public class MyException super Exception {

}
_

例外クラスからオブジェクトを作成するメソッドを作成し、Key Wordthrowを使用してthrowsにします。

_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 
  } 
}
_

メソッド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-Exceptionをスローするために使用されます。throwステートメントには、1つの引数が必要です。

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

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

2
Sachin Shanbhag

スロー:

実際に例外をスローするために使用されますが、throwsはメソッドの宣言型です。それらは互換性がありません。

throw new MyException("Exception!);

スロー:

これは、コードでtry catchステートメントを使用していないが、この特定のクラスが例外をスローできることがわかっている場合に使用します(チェック済み例外のみ)。これでは、try catchブロックを使用せず、コードの適切なポイントでthrow句を使用して記述します。例外はメソッドの呼び出し元にスローされ、処理されます。関数がチェック済み例外をスローする可能性がある場合も、throwsキーワードが使用されます。

public void myMethod(int param) throws MyException 
1
speeday125

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

例外をスローする方法

1
DixonD

例外には主に2つのタイプがあります。
実行時例外(未チェック):例NullPointerException、ClassCastException、..
チェック済み例外:例FileNotFoundException、CloneNotSupportedException、..

実行時例外は実行時に発生する例外であり、開発者はそれをキャッチしたり停止したりしないでください。エラー条件が満たされたときに、それらを避けるためのコードを書くか、コマンドthrowを発行するだけです。メソッド本体内でthrowを使用します。

public Rational(int num, int denom){
if(denom <= 0) {
  throw new IllegalArgumentException("Denominator must be positive");
}
this.num=num;
this.denom=denom;
}

ただし、Checked Exceptionsの場合、JVMはユーザーがそれを処理することを予期し、処理されない場合はコンパイラーエラーを発生するため、clone()メソッドで以下に示すようにそのタイプの例外をスローすることを宣言します。

Class Employee{
public Employee clone() throws CloneNotSupportedException{
    Employee copy = (Employee)super.clone();
    copy.hireDate = (Date)hireDate.clone();
    return copy;
}
}
0
karto