blog

例外とエラー例外は、ほとんどの人が犯している間違いである。

1、はじめに ExceptionとErrorはThrowableクラスから継承され、JavaではThrowable型のインスタンスだけが投げたりキャッチしたりできる、例外処理の基本的な仕組みです。この...

Mar 27, 2020 · 3 min. read
シェア

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のような一般的な例外をキャッチするのではなく、特定の例外をキャッチするようにします。

  • 例外を飲み込んではいけません。

Read next

デザイン・パターン - プロトタイプ・パターン

オブジェクトを作成するコストが大きく、同じクラスの異なるオブジェクト間の差が小さい場合、作成時間を節約するために、既存のオブジェクトのコピーを使用して新しいオブジェクトを作成することができます。このように、プロトタイプに基づいてオブジェクトを作成する方法を、プロトタイプ設計パ...

Mar 27, 2020 · 1 min read