1.基本的な考え方
例外処理は、ソフトウェアまたは情報システムの異常な状態(つまり、プログラムの通常の実行フローを超えるいくつかの特別な状態)を処理するために使用されるプログラミング言語またはコンピューターハードウェアのメカニズムです。
例外処理(エラー処理とも呼ばれます)機能は、プログラムの実行中に発生する予期しない状況や異常な状況を処理する方法を提供します。例外処理では、try、catch、finallyキーワードを使用して、失敗する可能性のある操作を試行し、失敗を処理し、事後にリソースをクリーンアップします。
2.異常分類
- エラー:jvmシステムの内部エラー、リソースの枯渇、およびその他の深刻な状況。
- 例外:プログラミングエラーまたは偶発的な外部要因によって引き起こされる状況。
3.例外処理方法
例外処理メカニズムにより、次のように分割できます。
- キャッチ例外:try…catch…catch……最後に;
- 例外をスローします:show; show;
4.詳細な処理方法
キャッチ例外
(1)構文:
try {
…//考えられる例外
}キャッチ{
} finally {//無条件に実行されるステートメント;
}
(2)文法モジュールの機能:
tryステートメント:例外をキャッチする最初のステップは、try {...}ステートメントブロックを使用して、キャッチする例外のスコープを選択し、異常な可能性のあるコードをtryステートメントブロックに配置することです。
Catchステートメント:catchステートメントブロックには、例外オブジェクトを処理するためのコードがあります。各tryステートメントブロックには、生成される可能性のあるさまざまなタイプの異常オブジェクトを処理するための1つ以上のcatchステートメントを付けることができます。
finalステートメント:(プログラムに含まれていない可能性があります)例外をキャッチする最後のステップで実行されます。tryまたはcatchコードブロックで例外が発生したかどうかに関係なく、finallyブロックのステートメントが実行されます。
(3)ケース:
//案例一:
public class Erron1 {
public static void main(String[] args) {
int x=0;
try {
System.out.println(2/x);
} catch (Exception e) {
//当不知道捕获的是什么类型的异常时,可以直接使用所有异常的父类Exception
e.printStackTrace();//抛出错误类型,原因,地点
System.out.println(e.getMessage());//输出错误原因
}
}
}
//案例二:
//在try中只要遇到错误就会中断后的语句执行,直接执行catch中的语句;
public class Erron1 {
public static void main(String[] args) {
int x=0;
try {
System.out.println(1);
System.out.println(2/x);//捕捉到异常后就会中断后面语句执行catch中语句
System.out.println(2);
System.out.println(3/x);
} catch (Exception e) {
System.out.println(3);
e.printStackTrace();//抛出错误类型,原因
System.out.println(e.getMessage());//输出错误原因
}
}
//案例三:
//1、只要在tyr中有finally语句finally中的程序就会被执行;
//2、在捕获异常的代码块中(try{}里的代码),如果前面的代码有异常了,就不会执行后面的,也不会执行后面代码扑捉的catch
public class Erron1 {
public static void main(String[] args) {
int x=0;
String[] arr=new String[]{
"e","c","d"};
try {
System.out.println(32/x);
System.out.println(arr[3]);
} catch (ArithmeticException e1) {
e1.printStackTrace();
System.out.println(1);
}catch (ArrayIndexOutOfBoundsException e2) {
e2.printStackTrace();
System.out.println(2);
}finally {
System.out.println("异常处理完成!");
}
System.out.println("OK");
}
}
例外をスローする
(1)関数:
例外が生成され、呼び出し元がそれを処理します(throws句をメソッド宣言で使用して、スローされた例外のリストを宣言できます。throws後の例外タイプは、メソッドまたはそのメソッドで生成された例外タイプにすることができます。親クラス)
(2)スローとスローの違い
-
throwは、例外をスローするステートメントです。
構文:throw(例外オブジェクト); -
throwsは、メソッドが例外をスローする可能性があるというステートメントです。(メソッドを宣言するときに使用され、メソッドが例外をスローする可能性があることを意味します)
構文:(修飾子)(戻り値タイプ)(メソッド名)([パラメーターリスト])[throws(例外クラス)] {.. .. }
(3)ケース:
//案例一:throws
public class Error2 {
public static void main(String[] args) {
A a=new A();
try {
//throws在代码这抛出的异常,在调用方去捕获处理
a.show();
} catch (Exception e) {
e.printStackTrace();
}
}
}
class A{
int a=12;
public void show() throws NullPointerException{
A b=null;
System.out.println(b.a);
}
}
//案例二:throw
public class Error2 {
public static void main(String[] args) {
B b=new B();
try {
b.age(12);
b.age(-12);
} catch (Exception e) {
e.printStackTrace();//抛出异常
}
}
}
class B{
int age;
public void age(int age) throws Exception {
if (age >=0&&age<+120) {
this.age=age;
System.out.println("年龄是:"+this.age);
}else {
throw new Exception("年龄输入有误!!");//人工抛出异常
}
}
}