異常な
1.例外とは何ですか?
Javaのエラーは、大きく2つのカテゴリに分類できます。
1つのタイプはコンパイル時エラーです。これは一般に構文エラーを指し、一般的に回避できます。
もう1つのタイプはランタイムエラーです。
例外クラスと呼ばれる、Javaのさまざまなランタイム例外を記述するために特に使用される一連の例外があります。Javaを例外クラスと組み合わせると、エラーを処理するためのメカニズムが提供されます。
具体的な手順は次のとおりです。
プログラムでエラーが発生すると、エラー情報を含む例外クラスのインスタンス化されたオブジェクトが作成され、オブジェクトがシステムに自動的に送信され、システムはそれを例外を処理できるコードに転送します。処理用。
例外は、エラーと例外の2つのカテゴリに分類できます。
エラーとは、JVMによって生成されたシステムエラーを指し、作成したプログラムはそれを処理できません。
例外とは、プログラムの実行中に発生するエラーを指し、私たちが作成するプログラムはそれを処理できます。
2.異常な使用
例外を使用するには、2つのキーワードtryとcatchを使用する必要があり、これら2つのキーワードを組み合わせて使用する必要があります。tryを使用して、例外をスローする可能性のあるコードを監視します。例外がキャッチされると、例外オブジェクトが生成され、渡されます。処理、基本的な構文は次のとおりです。
try{
//可能抛出异常的代码
}catch(Exception e){
//处理异常
}
package com.song.exception;
public class Test {
public static void main(String[] args) {
try {
int num = 10/10;
}catch (Exception e) {
// TODO: handle exception
if(e.getMessage().equals("/ by zero")) {
//用err的输出为红色
System.err.println("分母不能为0");
}
}
}
}
tryとcatchに加えて、finallyキーワードを使用して例外を処理することもできます。finallyの機能は何ですか。
プログラムが例外をスローするかどうかに関係なく、finally codeブロックのコードが実行され、finallyは通常catchcodeブロックの後に続きます。基本的な構文は次のとおりです。
try{
//可能抛出异常的代码
}catch(Exception e){
//处理异常
}finally{
//必须执行的代码
}
一例:
package com.song.excepton;
public class Test2 {
public static void main(String[] args) {
System.out.println(test());
}
public static int test() {
try {
System.out.println("try...");
return 10;
}catch(Exception e) {
}finally{
System.out.println("finally...");
return 20;
}
}
}
出力は次のとおりです
。try...
finally ...
20
プログラムが例外をスローするかどうかに関係なく、finallyコードブロックのコードは確実に実行され、finallyの戻り結果は、tryですでに返された結果を上書きして、外部呼び出し元に戻ることを説明します。通常、リソースの解放は最終的に実行されます。
3.異常
Javaは、実行時に発生するすべてのエラーをクラスにカプセル化します。これはクラスではなく、クラスのセットです。同時に、これらのクラスの間には階層関係があり、ツリー構造からレイヤーごとに等級付けされます。最上位のクラスはThrowableであり、これはすべての異常なクラスのルートノードです。
Throwableには、ErrorとExceptionの2つの直接サブクラスがあります。Throwable、Error、Exceptionはすべてjava.langパッケージに格納されています。
Errorのサブクラスには、VirtualMachineError(仮想マシンの例外)、AWTError、IOError(入力および出力ストリームの例外)が含まれます。
VirtualMachineErrorのサブクラスは、StackOverflowError(スタックメモリオーバーフロー例外)、OutOfMemoryError(メモリオーバーフロー例外)です。システムエラーであり、処理できないメモリオーバーフローなどのシステム問題を説明するために使用されます。
Exceptionのサブクラスには、IOExceptionとRuntimeExceptionが含まれます。IOExceptionはjava.ioパッケージに格納され、RuntimeExceptionはjava.langパッケージに格納されます。
IOExceptionのサブクラスには、FileLockInterruptionException、FileNotFoundException、およびFilerExceptionが含まれます。これらの例外は通常、IOストリームを介したファイル転送中に発生するエラーです。
RuntimeExceptionのサブクラスは次のとおりです。
- (1)ArithmeticException:異常な数学演算を示します。
- (2)ClassNotFoundException:テーブルクラスの未定義の例外。
- (3)。IlllelArgumentException:パラメーター形式が正しくないことを示します。
- (4)、ArrayIndexOutOfBounds:配列インデックスが範囲外であることを示します。
- (5)、NullPointException:nullポインター例外を示します。
- (6)NoSuchMethodException:メソッドが未定義の例外であることを示します。
- (7)、NumberFormatException:他のデータ型が数値型に変換されるときに発生する型の不一致の例外を表します。
4、投げ和投げ
スローとスローは、Javaが例外を処理するときに使用する2つのキーワードです。どちらも例外をスローするために使用できますが、使用される方法と意味は完全に異なります。
Javaで例外をスローする方法は3つあります。
- (1)トライキャッチ
- (2)throwを使用するということは、開発者が積極的に例外をスローすることを意味します。つまり、スローコードを読み取るときに例外をスローする必要があります。基本構文:throw new Exception()は、ロジックに基づいて積極的に例外をスローする方法です。コードの。
public class Test {
public static void main(String[] args) {
int[] array = {
1,2,3};
test(array,2);
}
public static void test(int[] array,int index) {
if(index >= 3 || index < 0) {
try {
throw new Exception();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else {
System.out.println(array[index]);
}
}
}
- (3)try-catchとthrowはどちらも特定のロジックコードに作用し、throwsはメソッドに作用します。メソッドはメソッドによってスローされる可能性のある例外を記述します。
メソッドがRuntimeExceptionまたはそのサブクラスをスローする場合、外部呼び出しは処理できず、JVMがそれを処理します。
メソッドが例外またはそのサブクラスである場合は、外部呼び出し中に処理する必要があります。そうしないと、エラーが報告されます。
public class Test {
public static void main(String[] args) throws Exception {
test("123");
}
public static void test(String str) throws Exception {
int num = Integer.parseInt(str);
}
}
5.例外キャプチャの3つの方法:
- トライキャスを自動的にキャプチャする
- 積極的に例外をスローします
- throwsは、例外をスローする可能性のあるメソッドを変更します
6、カスタム例外
Javaが提供する例外を使用することに加えて、要件に基づいて例外をカスタマイズすることもできます。
package com.song.exception;
public class MyNumberException extends RuntimeException {
public MyNumberException(String error) {
super(error);
}
}
package com.song.exception;
public class Test {
public static void main(String[] args){
Test test = new Test();
System.out.println(test.add("a"));
}
public int add(Object object){
if(object instanceof Integer) {
int num = (int)object;
return ++num;
}else {
String error = "传入的参数不是整数类型";
MyNumberException myNumberException = new MyNumberException(error);
throw myNumberException;
}
}
}