例外処理:投げ捨て、スロー可能オブジェクト
-
30-09-2019 - |
質問
まだ説明の違いと throw
, throws
や Throwable
とするために使用される?
解決
throws
:を記述する際に使用方法を宣言するのに法人投指定された(確認)。とを確認の例外をランタイム例外(NullPointerExceptionsなど)がスローされずにその方法を宣言する
throws NullPointerException
.throw
:指導実際にスローします。(より具体的には、 スロー可能オブジェクト).を捨てるとキーワードに対して、それを参照
Throwable
(通常ます。
例:
Throwable
:クラスする必要があるために作成、カスタム、throwable.
例:
他のヒント
throw
: :オブジェクトをスローするステートメントt
どこt instanceof java.lang.Throwable
真実でなければなりません。throws
: :チェックされた例外を指定するメソッド署名トークンthrow
nその方法による。java.lang.Throwable
: :投げられる(および捕獲される)ことができるすべてのオブジェクトの親タイプ。
これは本当に理解しやすいです。
java.lang.throwable:
Throwable
クラスは、Java言語のすべてのエラーと例外のスーパークラスです。このクラスのインスタンスであるオブジェクト(またはそのサブクラスの1つ)のみがJava仮想マシンによってスローされるか、Javaでスローできますthrow
声明。同様に、このクラスまたはそのサブクラスの1つのみが、catch
句。 もっと
キーワード スロー メソッド宣言で使用されます。これは、このメソッドに期待できる例外[スロー可能なクラス]の種類を指定します。
キーワード 投げる クラススロー可能なインスタンスであるオブジェクトをスローするために使用されます。
例を参照してください:
私たちは自分で例外クラスを作成します
public class MyException super Exception {
}
例外クラスからオブジェクトを作成するメソッドを作成し、 スロー キーワードを使用して 投げる.
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つの選択肢があります。
最初のオプションは、ブロックトライを使用して例外を処理することです。
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;
}
}
再開すると、アクションを停止する必要がある場合は、トライキャッチブロックによるサーバーではない場合に戻る例外をスローできます。例外をスローするメソッドを使用する場合は、トライキャッチブロックで処理するか、メソッドに宣言を追加する必要があります。
このルールの例外は次のとおりです java.lang.RuntimeException
それらを宣言する必要はありません。これは、例外使用の側面としての別のストーリーです。
スロー - それは例外をスローするために使用されます。スローステートメントには単一の引数が必要です:スロー可能なクラスオブジェクト
スロー - これは、メソッドが例外をスローできることを指定するために使用されます
スロー可能 - これは、Java言語のすべてのエラーと例外のスーパークラスです。スロー可能なクラスに由来するオブジェクトのみを投げることができます。 Throwableには、作成された時点でのスレッドの実行スタックのスナップショットが含まれています
Throw
例外をスローするために使用されます、 throws
(私が正しく推測した場合)は、方法が特定の例外をスローできることを示すために使用されます。 Throwable
クラスは、Javaのすべてのエラーと例外のスーパークラスです
投げる :
実際に例外をスローするために使用されますが、スローはメソッドの宣言です。それらは交換可能ではありません。
throw new MyException("Exception!);
スロー:
これは、コードでTry Catchステートメントを使用していない場合に使用されますが、この特定のクラスはそのように例外を投げることができることを知っています(チェックされた例外のみ)。これでは、キャッチブロックを試してみるのではなく、コードの適切なポイントでスロー句を使用して書き込み、例外がメソッドの発信者にスローされ、それによって処理されます。また、関数がチェックされた例外をスローする場合がある場合、スローキーワードが使用されます。
public void myMethod(int param) throws MyException
例外には2つの主要なタイプがあります。
ランタイムの例外(チェックされていない): :例。 nullpointerexception、classcastexception、..
確認された例外: 例えば。 filenotfoundexception、clonenotsupportedexception、..
ランタイムの例外は、実行時に発生する例外であり、開発者はそれをキャッチしたり停止しようとしないでください。それらを避けるためにコードを書き込むか、コマンドを発行するだけです 投げる, 、エラー基準が満たされている場合。メソッドボディの内側にスローを使用します。
public Rational(int num, int denom){
if(denom <= 0) {
throw new IllegalArgumentException("Denominator must be positive");
}
this.num=num;
this.denom=denom;
}
ただし、チェックされた例外のために、JVMはそれを処理することを期待し、処理されない場合はコンパイラエラーが発生するため、Clone()メソッドで以下に示すようにそのタイプの例外をスローすることを宣言します。
Class Employee{
public Employee clone() throws CloneNotSupportedException{
Employee copy = (Employee)super.clone();
copy.hireDate = (Date)hireDate.clone();
return copy;
}
}
上記と同じ答えがあります コピーペーストの喜び:
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;
}
}