JAVA基礎コース(15日目)
4499 ワード
JAVA基礎コース
15日目異常について
例外の概要と例外アーキテクチャ
(1)異常Javaでプログラム実行中に発生した異常を「異常」と呼ぶ.構文エラーや論理エラーは異常と呼ばない.
(2)Javaにおける異常は2つに分類される.
①Error:Java仮想マシンでは解決できない深刻な問題.JVMシステムの内部エラー、リソースの消費などの深刻な状況.たとえば、StackOverflowErrorスタックオーバーフローとOutOfMemoryError(OOM)スタックオーバーフローです.一般的には、ターゲットコード処理は記述されません
②Exception:プログラミングエラーや偶然の要因による一般的な問題は、対象コードで処理できます.例えば、空ポインタ異常など
(3)アーキテクチャ
java,lang,Throwable
|–Error
|–Exception
|–コンパイル時異常(checked)
|–IOException
|–ClassNotFoundException
|–運転時異常
|–NullPointerException
|–ArrayIndexOutOfBoundsException
|–ClassCaseException
|–NumberFormatException
|–InputMismatchException
|–ArithmeticException
(4)よくある異常のコード
異常処理メカニズム
スナップモデル
プロシージャ1:放出プログラムの実行中、例外が発生すると、例外コードに対応する例外クラスのオブジェクトが生成され、セカンダリオブジェクトが放出されます.オブジェクトを投げ出すと他のコードは実行されません
プロセス2:「つかむ」は異常を投げ出す処理と理解できる
(1)try-catch-finally
①形式
②説明
1』finallyはオプションです
2)tryを使用して発生する可能性のある異常をパッケージし,実行中に異常が発生すると異常クラスに対応するオブジェクトを生成し,サブオブジェクトのタイプに応じてcatchにマッチングし,あるcatchにマッチングすると異常処理を行う.処理が完了するとiuは現在のtry-catch構造を終了し、後続コードの実行を継続する
3』catch子親関係がない場合はどうでもいいが、子親関係が満たされている場合は、子クラスを親クラスの上に求め、そうでない場合はエラーを報告する
4)異常オブジェクトの処理方法:String getMessage()またはprintStackTrace()
(2)throws+異常タイプ
①形式:メソッド宣言に書く
②説明:
1)このメソッドの実行時に、例外タイプが放出される可能性があることを示し、メソッドボディの実行中に異常が発生すると、異常コードに異常オブジェクトが放出され、サブオブジェクトがthrows異常タイプを満たすと、放出され、異常サブ厚さのdiamagneticは実行されない
(3)try-catch-finallyまたはthrows+例外タイプの選択方法
①親メソッドで書き換えられたメソッドにthrowsメソッド処理異常がなければ、子メソッド書き換えのメソッドもthrowsを使用できません.try-catch-finally構造を使用する必要があります
②実際の開発におけるニーズに応じて選択
手動で例外を放出
throwによる手動放出異常
ユーザーカスタム例外クラス
15日目異常について
例外の概要と例外アーキテクチャ
(1)異常Javaでプログラム実行中に発生した異常を「異常」と呼ぶ.構文エラーや論理エラーは異常と呼ばない.
(2)Javaにおける異常は2つに分類される.
①Error:Java仮想マシンでは解決できない深刻な問題.JVMシステムの内部エラー、リソースの消費などの深刻な状況.たとえば、StackOverflowErrorスタックオーバーフローとOutOfMemoryError(OOM)スタックオーバーフローです.一般的には、ターゲットコード処理は記述されません
②Exception:プログラミングエラーや偶然の要因による一般的な問題は、対象コードで処理できます.例えば、空ポインタ異常など
(3)アーキテクチャ
java,lang,Throwable
|–Error
|–Exception
|–コンパイル時異常(checked)
|–IOException
|–ClassNotFoundException
|–運転時異常
|–NullPointerException
|–ArrayIndexOutOfBoundsException
|–ClassCaseException
|–NumberFormatException
|–InputMismatchException
|–ArithmeticException
(4)よくある異常のコード
package com.test.course.exceptiontest;
import java.util.Date;
/**
* 〈 〉
* @author PitterWang
* @create 2020/5/2
* @since 1.0.0
*/
public class ExceptionAll {
public static void main(String[] args) {
/***
* Exception in thread "main" java.lang.StackOverflowError
* main(args);
*/
/***
* Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
* Integer[] i = new Integer[1024*1024*1024];
*/
/***
* java.lang.ArrayIndexOutOfBoundsException:
* Integer[] i = new Integer[]{1,2,3};
* System.out.println(i[3]);
*/
/***
* java.lang.NullPointerException
* Date date = null;
* System.out.println(date.toString());
*/
/**
* java.lang.ArithmeticException: / by zero
* int i = 3/0;
*/
}
}
異常処理メカニズム
スナップモデル
プロシージャ1:放出プログラムの実行中、例外が発生すると、例外コードに対応する例外クラスのオブジェクトが生成され、セカンダリオブジェクトが放出されます.オブジェクトを投げ出すと他のコードは実行されません
プロセス2:「つかむ」は異常を投げ出す処理と理解できる
(1)try-catch-finally
①形式
try {
}catch ( 1 1){
}catch ( 2 2){
}catch ( 3 3){
}finally {
//
}
②説明
1』finallyはオプションです
2)tryを使用して発生する可能性のある異常をパッケージし,実行中に異常が発生すると異常クラスに対応するオブジェクトを生成し,サブオブジェクトのタイプに応じてcatchにマッチングし,あるcatchにマッチングすると異常処理を行う.処理が完了するとiuは現在のtry-catch構造を終了し、後続コードの実行を継続する
3』catch子親関係がない場合はどうでもいいが、子親関係が満たされている場合は、子クラスを親クラスの上に求め、そうでない場合はエラーを報告する
4)異常オブジェクトの処理方法:String getMessage()またはprintStackTrace()
(2)throws+異常タイプ
①形式:メソッド宣言に書く
( ) throws
②説明:
1)このメソッドの実行時に、例外タイプが放出される可能性があることを示し、メソッドボディの実行中に異常が発生すると、異常コードに異常オブジェクトが放出され、サブオブジェクトがthrows異常タイプを満たすと、放出され、異常サブ厚さのdiamagneticは実行されない
(3)try-catch-finallyまたはthrows+例外タイプの選択方法
①親メソッドで書き換えられたメソッドにthrowsメソッド処理異常がなければ、子メソッド書き換えのメソッドもthrowsを使用できません.try-catch-finally構造を使用する必要があります
②実際の開発におけるニーズに応じて選択
手動で例外を放出
throwによる手動放出異常
package com.test.course.exceptiontest;
/**
* 〈 〉
* @author PitterWang
* @create 2020/5/2
* @since 1.0.0
*/
public class ExceptionTest {
public static void main(String[] args){
regit(-1);
}
public static void regit(int i){
if(i > 0){
System.out.println(" ");
}else{
throw new RuntimeException("i 0");
}
}
}
ユーザーカスタム例外クラス
package com.test.course.exceptiontest;
/**
* 〈 〉
*
* 1, RuntimeException
* 2, serialVersionUID
* 3,
* @author PitterWang
* @create 2020/5/2
* @since 1.0.0
*/
public class MyException extends RuntimeException{
static final long serialVersionUID = -1;
public MyException(){
}
public MyException(String message){
super(message);
}
}