記事のディレクトリ
I.はじめに
著者は自習用のJAVAホワイトであり、オンラインビデオ学習とJAVAのコアアイデアの彼自身の理解を通じて、異常の認識を次のように説明しています:(私が学んだJavaを同僚や友人の知識と共有したいと思っています。同時に、同僚が著者の欠点を指摘し、Xiaobaiのプログラミングスキルを向上させるのに役立つことを心から願っています。同僚に感謝します。
2.例外とエラーの基本的な理解
2.1例外とエラーの定義
異常:プログラムの実行中に異常な状況が発生しました。
例外(例外条件)とは、現在のメソッドまたはスコープの実行を継続できない問題を指します。----- Javaのコアアイデア
Xiaobaiは、プログラムで回避または解決できるエラーを理解しています。
エラー:実行できないコードステートメントまたは仕様。
すべてのエラーが発生する限り、Javaはプログラムの実行を終了し、JVMを終了し、エラーを実行できません。
2.2異常分類
例外は、コンパイル時例外(Exception)とランタイム例外(RunTimeException)に分けることができます。
コンパイル時の例外:Exceptionのすべての直接サブクラスは、プログラムを作成するときにこの例外を事前に処理する必要があります。そうでない場合、コンパイラはエラーを報告します。
ランタイム例外:すべてのRuntimeExceptionとサブクラスはランタイム例外に属します。ランタイム例外はプログラミングの段階では処理されません。
例外はコンパイル時に発生する可能性が高く(それらのほとんどは文法的、論理的、および型外の範囲値です)、実行時の例外の可能性は比較的小さいです。
プログラムランタイムのみが新しいオブジェクトを作成できるため、コンパイル時例外とランタイム例外の両方がランタイムフェーズで発生することに注意してください。例外の発生は新しい例外オブジェクトです。コンパイル時例外は、事前に処理する必要があります。書き込みフェーズ。処理中、コンパイラはエラーを報告します。
2.3異常なエイリアス
コンパイル時の例外は、制御された例外およびチェックされた例外とも呼ばれます。
ランタイム例外は、制御されていない例外およびチェックされていない例外とも呼ばれます。
3、異常な取り扱い
例外はJavaの一種のクラスと見なすことができます(JAVAの目的:すべてがオブジェクトであり、何が新しいか-JAVAのコアアイデア)
3.1例外処理の2つの方法
1. throw、throwsキーワード(Javaに付属する例外)を使用して、上位レベルにスローします。
2. trycatchステートメントを使用して例外をキャッチします
スローされる可能性のある例外についてこのメソッドを使用するフロントエンドプログラマーに通知するように人々を促すために、JAVAは、メソッド宣言の一部である例外宣言のメカニズムを提供します。
例外の説明(スロー)
//throws声明只能抛出发生JAVA自带的异常类
public static void main(String []args) throws
スロー
//用于程序员自己产生抛出新建的异常类
throw new //新建的异常类
3.1例外メソッド
getMessage();
役割:異常情報の簡単な説明を出力する
Exception e=new Exception("异常错误");
System.out.println(e.Message);
出力
异常错误
exception.printStackTrace();
機能:デバッグと同様に、例外トレースのスタック情報を出力します
出力
//输出形式
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileInputStream.<init>(FileInputStream.java:93)
at note.exception.ExceptionTest04.m3(ExceptionTest04.java:28)
at note.exception.ExceptionTest04.m2(ExceptionTest04.java:24)
at note.exception.ExceptionTest04.m1(ExceptionTest04.java:21)
at note.exception.ExceptionTest04.main(ExceptionTest04.java:34)
Javaバックグラウンドが例外スタックトレース情報を出力する場合、非同期スレッドメソッドを使用して上から下に1つずつ出力することに注意してください。
3.3異常な使用
自動スロー
Xiaobaiは次のことを理解しています:main()メソッドがJava独自の例外クラスをスローするか、最初に例外ステートメントを呼び出したメソッドでJava独自の例外クラスを宣言した場合にのみ、自動的に上向きにスローできます。他のメソッドでthrowsを使用すると、何が起こったかを宣言することしかできません。 。例外。クライアントプログラマに警告するために使用されます。
//抛出声明
public static void main(String []agrs) throws NullPointException{
}
public static void dosome()throws ClassNotFoundException{
}
用例:
public class ExceptionTest04 {
private static void m1()throws FileNotFoundException{
m2();
}
private static void m2()throws FileNotFoundException{
m3();
}
private static void m3()throws FileNotFoundException {
new FileInputStream("abcdsesf");
}
public static void main(String[] args) {
try {
m1();
/**
* 调用m1,m2,m3方法,在试图捕捉异常后,如果捕捉到了,就不再继续执行该方法后面的语句,转而执行catch和finally
*/
System.out.println("end");
}
catch (FileNotFoundException e) {
String ep=e.getMessage();//以字符串形式获取简述异常信息
//System.out.println(ep);//输出简单异常信息
e.printStackTrace();//该方法与debug相似的功能,输出较详细的异常语句路径
System.out.println("begin");
}
finally {
/**
* 在这里设置文件流的关闭---老猿经验
* finally内的代码一定会执行
*/
}
System.out.println("perfect");//try catch后继续执行
注:
1つずつ上向きに投げる場合、それは彼の親オブジェクトにのみ投げることができます。
例外がキャッチされない限り、スローする方法が採用されます。例外が発生した後は、例外ステートメントは実行されません。
逆に、capture try catchであれば、tryステートメント異常のJAVA実行時に異常が発生し、実行を停止し
ます。OK例外後続コードがcatchステートメントの代わりに実行され、trycatchは以下のコードの実行を継続できます。
例外処理メカニズムの機能は、プログラムの堅牢性を強化することです。
結果:
java.io.FileNotFoundException: abcdsesf (系统找不到指定的文件。)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileInputStream.<init>(FileInputStream.java:93)
at note.exception.ExceptionTest04.m3(ExceptionTest04.java:28)
at note.exception.ExceptionTest04.m2(ExceptionTest04.java:24)
at note.exception.ExceptionTest04.m1(ExceptionTest04.java:21)
at note.exception.ExceptionTest04.main(ExceptionTest04.java:34)
begin
perfect
手動スロー
throw 异常对象;
//throw new Exception;
注: Javaで例外が発生した後、スローの形式が常に使用されている場合、最終的にはmain()メソッドにスローされ、main()メソッドは引き続き上向きにスローされます。これにより、最終的にJVMがプログラムを終了します。
キャプチャ
try{
//可能发生异常的语句
}catch(Exception e){
//e是一个引用变量,指向堆中的Exception
}
finally{
}
注:tryには、例外を引き起こす可能性のあるステートメントが含まれています。複数のキャッチが存在する可能性がありますが、特定の例外から親の例外まで、ツリー構造で下から上にキャプチャする必要があります。例外が発生した場合、例外の下のステートメントはWillではありません。実行します。代わりに、catchステートメントとfinallyステートメント(存在する場合)を実行します。
3.4スローとスローの違い
1.さまざまな役割
throwは、プログラマーが例外を生成してスローするために使用され、throwsは、メソッドで例外がスローされることを宣言するために使用されます。
2.使用する場所が異なります
throwはメソッド本体の内部にあり、個別のステートメントとして使用できます
スローはメソッドパラメータリストに従う必要があり、単独で使用することはできません
3.内容が異なります
throwは例外オブジェクトをスローし、1つだけにすることができます
スローの後には例外クラスが続き、複数存在する可能性があります。
第四に、ファイナルの違いが最終的に3つをファイナライズします
Final:はキーワードです。finalによって変更されたクラス、メソッド、変数、およびクラスは継承できず、メソッドをオーバーライドできず、変数値を変更できません。Finalは通常、変数を変更するときにstaticと組み合わせて使用されます。
final:は例外に表示されるキーワードです。最後に、通常はtryと組み合わせて使用されます。tryにSystem.exit()ステートメントがない場合、finallyのメソッドが実行されます。
finalize:は識別子であり、GCがガベージコレクションのクリーンアップを担当する場合のメソッドです。