1、はじめに
ExceptionとErrorは、どちらもThrowableクラスから継承されています。 Javaでは、Throwable型のインスタンスのみがスローまたはキャッチされ、例外処理の基本的なメカニズムです。
この2つの違いは何ですか?
例外は、Javaプログラムの実行中に予測可能な例外であり、私たちはそのような例外を取得し、ビジネスの外でそのような例外を処理することができます。
エラーは、Javaプログラムの動作で予期しない例外であり、この例外の発生後、それは直接JVMが処理できないか、または回復することはできませんにつながります。だから、この種の例外は、OutOfMemoryError、NoClassDefFoundErrorなどのように、キャッチすることは不可能です。
2、サブクラス
両方の例外にどのようなサブクラスがあるのか見てみましょう。
1、例外
(1)RuntimeException(2)NullPointerException(3)ClassCaseException(4)SecurityException(5)IOException
2, エラー
(1)OutofMemoryError(2)StackOverFlowError(3)VirtualMachineError(4)LinkageError(5)NoClasDeffoundError(6)ExceptionInInitializerError
上記は、両方のサブクラスにどのようなサブクラスが含まれているかを示しています。
ExceptionとErrorはどちらもThrowableクラスを継承しています。
3, 投げられる
Throwableを操作するJava言語の要素を理解し、その使い方を知ることが不可欠です。
try-catch-finallyブロック、throw、throwsキーワードなど、最も基本的な構文の知識は必須です。
また、典型的なシナリオの処理方法も知っておいてください。
throwsはメソッドのコードブロック内に存在し、throwsはメソッドの周辺、通常はメソッド名throws XXXExceptionの後に存在します;
try-catch-finallyの使用を見てみましょう、一般的に例外の恐怖が直接try-catch-finally追加されますが、この例外のキャプチャは、シーケンスがあり、次の2つの例を説明します。
try{ retrun 3;}catch{ e.printStackTrace();}finally{ return 4;}
//上記の場合、実際に返されるのは4である;
try{ int x = 3; retrun x;}catch{ e.printStackTrace();}finally{ x++;}
//上記の場合、実際に返されたのは3;
finallyがすべてであることがわかったので、一般的に例外を処理し、例外を排除または解放して終了するものはfinallyにする必要がある、というのは本当ではないでしょうか。
1.例外のキャッチ
例外のキャッチとは、例外を直接処理することです。以下はその例です:
package com.company.test;
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;
public class Exception_Error { public static void main(String[] args) { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } finally {
} }}
2, 例外をスロー
package com.company.test;
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;
public class Exception_Error { public static void main(String[] args) { try{ throwChecked(3); }catch(Exception e) { System.out.println(e.getMessage()); } throwRuntime(-3); } //このメソッドはException例外オブジェクトを投げるので、それをキャッチするか、呼び出し元に投げなければならない public static void throwChecked throws Exception { if(a < 0) { throw new Exception("aの値が0より大きいはずだが、要件を満たしていない"); } } //このメソッドはRuntimeExceptionオブジェクトを投げるが、これは無視して処理のために直接JVMに渡すことができる public static void throwRuntime { if(a < 0) { throw new RuntimeException("aの値が0より大きいはずだが、要件を満たしていない"); } }}
throw文は、メソッド内で例外がスローされ、メソッド内のステートメントで処理されることを示すために使用されます。
throwは例外を外部に投げる動作なので、例外のインスタンスを投げることになります。
throwは、try-catch-finally文かthrowsで使われます。
RuntimeExceptionがスローされた場合は、try...catchとして表示するか、無視することができます!
、例外処理の2つの基本原則
Exceptionのような一般的な例外をキャッチするのではなく、特定の例外をキャッチするようにします。
例外を飲み込んではいけません。