Exception
異常と異常処理
Javaではexceptionを例外と呼び、エラーです.
例外は、プログラムまたはコンパイラの実行時に使用できない状態を作成することです.
では、異常処理とは何ですか.
異常処理は、異常が発生しないようにソースを制御し、異常を処理します.
要約すると、例外はエラーであり、プログラムの実行またはコンパイル時に使用不可能な状態が発生し、この状況を予測して処理することを例外処理と呼ぶ.
JAvaが異常をどのように処理するか(try、catch、throw、throws、finally)
try-catch-finallyコード
public class Main {
public static void main(String[] args) {
int a = 10;
int b = 0;
int result = 0;
try {
result = a / b;
} catch (IllegalAccessError e) {
System.out.println("IllegalAccessError");
System.out.println(e.getClass().getName());
} catch (ArithmeticException e) {
System.out.println("ArithmeticException");
System.out.println(e.getClass().getName());
} finally {
System.out.println(result);
}
}
}
try-catch-finallyコード結果
ArithmeticException
java.lang.ArithmeticException
0
コードを確認した後、10を0で割るとエラーが発生します.Resultは演算を行い,演算中にエラーが発生するためtryでマスクした値を得た.
例外が発生した場合、try以降のcatchに移動します.
まず最初のcatchに移動します.エラー自体が最初のcatch IllegalAccessErrorとは無関係なので、次のcatch ArithemicExceptionに移動します.
演算中に発生する異常はArithmeticExceptionであるため、このcatchで記述されたコードが実行され、finallyに移動すると、コードが実行されます.
catch文の再試行-catchコード
public class Main {
public static void main(String[] args) {
int a = 10;
int b = 0;
int result = 0;
try {
result = a / b;
} catch (IllegalAccessError e) {
System.out.println("IllegalAccessError");
System.out.println(e.getClass().getName());
} catch (ArithmeticException e) {
System.out.println("ArithmeticException");
System.out.println(e.getClass().getName());
try {
// b = 2;
result = a / b;
} catch (ArithmeticException e2) {
System.out.println("ArithmeticException2");
System.out.println(e.getClass().getName());
} finally {
System.out.println("catch문 안에 다시 try-catch");
}
} finally {
System.out.println(result);
}
}
}
catch文の再試行-catchコードの結果
ArithmeticException
java.lang.ArithmeticException
ArithmeticException2
java.lang.ArithmeticException
catch문 안에 다시 try-catch
0
throw
throwはエラーが発生しない場合でも故意にエラーを引き起こす.
次のコードは論理的にエラーはありませんが、故意にエラーが発生し、catchで作成されたコードを実行します.
throwコード
public class Main {
public static void main(String[] args) {
int a = 10;
int b = 5;
int result = 0;
try {
result = a / b;
throw new ArithmeticException();
} catch (ArithmeticException e) {
System.out.println("ArithmeticException");
System.out.println(e.getClass().getName());
} finally {
System.out.println(result);
}
}
}
throwコード結果
ArithmeticException
java.lang.ArithmeticException
2
throws
throwsはthrowsとは違います.
throwが故意にエラーを引き起こした場合、throwsはメソッド宣言子例外を宣言し、メソッドを使用するときにエラーが発生するかを通知します.
throwsは異常処理とは無関係であり,この方法を用いる場合は直接異常処理を行う必要がある.
throwsコード
public class Main {
public static void main(String[] args) throws IllegalAccessException, NullPointerException {
String illegal = "throw IllegalAccessException";
String nullPoint = "throw NullPointException";
try {
Main.testMethod(nullPoint);
} catch(IllegalAccessError | NullPointerException e) {
System.out.println(e.getClass().getName());
}
}
public static void testMethod(String text) throws IllegalAccessException, NullPointerException {
if(text.equals("throw IllegalAccessException")) {
throw new IllegalAccessException("you throw IllegalAccessException");
} else if(text.equals("throw NullPointException")) {
throw new NullPointerException("you throw NullPointException");
}
}
}
catch文がtryで発生するエラーを予測するために、2つのオプションが与えられます.IllegalAccessError
およびNullPointerException
はJDK 1である7以上で|
を使用し、1以上のエラーを同時に使用できます.
throwsコード結果
java.lang.NullPointerException
Java Exception階層
Javaでは、ExceptionがThrowableを継承し、ThrowableがObjectを継承します.
ExceptionはRuntimeExceptionと他のExceptionクラスの2つのサブクラスに分けられます.
RuntimeExceptionクラスを継承するサブクラスは,主に致命的な異常が発生しない異常からなる.
したがって,try-catchを記述するよりも記述コードの方が重要なのは,コードの記述中にエラーが発生しないようにすることであり,Exceptionクラスに属するサブクラスに異常が発生する可能性のある構文に対しては逆異常処理を行うべきである.
ExceptionとErrorの違いは?
public class Main {
public static void main(String[] args) {
int a = 10;
int b = 5;
int result = 0;
try {
result = a / b;
throw new ArithmeticException();
} catch (ArithmeticException e) {
System.out.println("ArithmeticException");
System.out.println(e.getClass().getName());
} finally {
System.out.println(result);
}
}
}
ArithmeticException
java.lang.ArithmeticException
2
throwsはthrowsとは違います.
throwが故意にエラーを引き起こした場合、throwsはメソッド宣言子例外を宣言し、メソッドを使用するときにエラーが発生するかを通知します.
throwsは異常処理とは無関係であり,この方法を用いる場合は直接異常処理を行う必要がある.
throwsコード
public class Main {
public static void main(String[] args) throws IllegalAccessException, NullPointerException {
String illegal = "throw IllegalAccessException";
String nullPoint = "throw NullPointException";
try {
Main.testMethod(nullPoint);
} catch(IllegalAccessError | NullPointerException e) {
System.out.println(e.getClass().getName());
}
}
public static void testMethod(String text) throws IllegalAccessException, NullPointerException {
if(text.equals("throw IllegalAccessException")) {
throw new IllegalAccessException("you throw IllegalAccessException");
} else if(text.equals("throw NullPointException")) {
throw new NullPointerException("you throw NullPointException");
}
}
}
catch文がtryで発生するエラーを予測するために、2つのオプションが与えられます.IllegalAccessError
およびNullPointerException
はJDK 1である7以上で|
を使用し、1以上のエラーを同時に使用できます.throwsコード結果
java.lang.NullPointerException
Java Exception階層
Javaでは、ExceptionがThrowableを継承し、ThrowableがObjectを継承します.
ExceptionはRuntimeExceptionと他のExceptionクラスの2つのサブクラスに分けられます.
RuntimeExceptionクラスを継承するサブクラスは,主に致命的な異常が発生しない異常からなる.
したがって,try-catchを記述するよりも記述コードの方が重要なのは,コードの記述中にエラーが発生しないようにすることであり,Exceptionクラスに属するサブクラスに異常が発生する可能性のある構文に対しては逆異常処理を行うべきである.
ExceptionとErrorの違いは?
READ
2021.05.06-最初のコンテンツの作成
Reference
この問題について(Exception), 我々は、より多くの情報をここで見つけました
https://velog.io/@jaepani5015/Exception
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Reference
この問題について(Exception), 我々は、より多くの情報をここで見つけました https://velog.io/@jaepani5015/Exceptionテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol