Javaの基礎18例外

プログラミングが好きなあなたのように!
SpringBoot実用的なコースは学習https://edu.csdn.net/course/detail/31433
SpringCloud入門コースを学びhttps://edu.csdn.net/course/detail/31451を


序文

この記事では、Javaの例外処理メカニズムを理解しましょう。

何が異常なのか

プログラムの実行中に発生するエラー、例外が発生すると、それを処理する必要があります。プログラムが処理されない場合、実行は中断されます。

例外アーキテクチャ

ここに写真の説明を挿入
Throwableは、JVMによって生成およびスローできる、例外およびエラーの親クラスです。
Throwableのサブクラス:

  • 例外
    例外が発生した後、プログラムを処理することができ、処理後にプログラムを正常に実行することができます。
  • エラーエラー
    は通常、StackOverflowスタックオーバーフローやOutOfMemoryErrorメモリオーバーフローなどのシステムレベルのエラーです。エラーが発生した後は処理できず、コードを変更して回避することしかできません。

異常な分類

  • 未チェックの例外
    RuntimeExceptionとそのサブクラス、プログラムは処理を必要としません
  • チェックされた例外チェックされた例外は
    RuntimeExceptionではなく、プログラムは処理を必要とします

一般的な例外

クラス名 異常な
NullPointerException ヌルポインタ例外
ClassCastException 型変換例外
ArrayIndexOutOfBoundsException 配列添え字の範囲外例外
StringIndexOutOfBoundsException 文字列添え字の範囲外例外
NumberFormatException 数値形式が異常
InputMismatchException 入力フォーマットが異常です
IllegalArgumentException 間違ったパラメータ例外
ArithmeticException 算術例外
ParseException 日付解析の例外
SQLException データベース例外
IOException 入出力異常
ClassNotFoundException クラスが見つからない例外

try-catch例外処理

例外が処理された後、プログラムは正常に実行できます。
構文:

try{
	可能出现异常的代码
}catch(异常类型 ex){
	处理异常的代码
}

例外処理プロセス:

  • tryのコードに例外がある場合、JVMは自動的に例外をスローし、プログラムはキャッチにジャンプして例外処理を実行し、プログラムは処理の終了後に正常に実行されます。
  • トライコードに例外がない場合は、トライコードを実行し、キャッチをスキップして次のコードを実行します。

例外の一般的な方法
例外方法:

メソッド名 効果
void printStackTrace() スタック情報を印刷する
文字列getMessage() 例外情報を取得する
スロー可能なgetCause() 上位レベルの例外を取得する

マルチキャッチ例外処理

文法:

try{
	可能出现异常的代码
}catch(异常类型1 ex){
	处理代码1;
}catch(异常类型2 ex){
	处理代码2;
}...

例外処理プロセス:

  • 例外が発生したら、例外を各catchブロックと照合します。照合が成功した場合は、catchを実行して終了します。
  • 一致しない場合は、次のキャッチの例外タイプを判別します。
    注:キャッチに他の異常な親クラスがある場合は、親クラスの例外を最後に配置する必要があります

try-catch-finally例外処理

最後に、finallyのコードはとにかく実行されます
。プログラムには、データベース接続の閉鎖、ファイルストリームの閉鎖、ネットワーク接続の閉鎖など、実行する必要のあるコードがいくつかあります

try{
	可能出现异常的代码
}catch(异常类型 ex){
	异常处理
}finally{
	如论如何都执行的代码
}

例外処理プロセス:

  • tryに例外がある場合は、catchにジャンプして処理を実行し、最後にfinallyコードを実行します。
  • tryに例外がない場合、tryが実行され、finallyがfinallyに実行されます。

try-catch-finallyケース

Scanner input = new Scanner(System.in);
try{
	System.out.println("输入一个数:");
	int num1 = input.nextInt();
	System.out.println("输入一个数:");
	int num2 = input.nextInt();
	int result = num1 / num2;
	System.out.println("result = " + result);
}catch(ArithmeticException ex){
	System.out.println("出现了算术异常");
	ex.printStackTrace();
}catch(InputMismatchException ex){
	System.out.println("出现了输入格式异常");
	ex.printStackTrace();
}catch(Exception ex){
	ex.printStackTrace();
}finally{
	System.out.println("最终执行的代码");
}
System.out.println("程序执行完毕~~~");

キーワードを投げて投げる

throwsキーワードは
、メソッドで例外を宣言するために使用されます。メソッドが例外を宣言すると、メソッドは例外を処理する必要がなく、メソッドの呼び出し元がそれを処理します。
通常、実行時以外の例外に使用されます。
文法:

public 返回值类型 方法名(参数列表) throws 异常类型1, 异常类型2...{

}

throwキーワードは
、手動で例外をスローし、呼び出し元にプロンプ​​トを表示するために使用されます。
構文:

if(条件){
	throw new 异常类型("异常描述信息");
}

演習:人の年齢を入力します。年齢は0〜100でなければなりません。年齢を超えると、IllegalArgumentExceptionがスローされます。

/**
 * 输入年龄
 * @throws IllegalArgumentException
 */
static void inputAge() throws IllegalArgumentException{
	Scanner input = new Scanner(System.in);
	System.out.println("输入年龄(0~100)");
	int age = input.nextInt();
	//手动抛出异常
	if(age < 0 || age > 100){
		throw new IllegalArgumentException("年龄必须在0到100之间");
	}
	System.out.println("年龄是"+age);
}

public static void main(String[] args) {
	try{
		inputAge();
	}catch(IllegalArgumentException ex){
		ex.printStackTrace();
	}
}

カスタム例外

特定のビジネス要件の下では、システム内の例外を適切に処理できないか、ビジネス上の問題を表します。例外クラスをカスタマイズして、特定のビジネス上の問題を解決できます。
たとえば、銀行口座からお金を引き出すときは、残高が十分かどうかを判断する必要があり
ます実装手順:
1)Exceptionまたはそのサブクラスを継承するクラスを定義します
。2)特定の条件が満たされた場合は、メソッドでthrowを使用します。例外をスローする。
メソッドを宣言する場合3)を、使用することは、文の例外スロー
メソッドを呼び出すとき4)、使用のtry-catchが例外を処理するために

/**
 * 余额不足异常
 * @author xray
 *
 */
public class BalanceException extends Exception{

	public BalanceException(String msg){
		//将异常描述信息传给父类
		super(msg);
	}
}
/**
 * 银行账户类
 * @author xray
 *
 */
public class BankAccount {

	private String name;
	private int balance;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getBalance() {
		return balance;
	}
	public void setBalance(int balance) {
		this.balance = balance;
	}
	public BankAccount(String name, int balance) {
		super();
		this.name = name;
		this.balance = balance;
	}
	public BankAccount() {
		super();
	}
	/**
	 * 存钱
	 * @param money
	 */
	public void saveMoney(int money){
		this.balance += money;
		System.out.println("账户"+name+"的余额是"+balance);
	}
	/**
	 * 取钱
	 * @param money
	 * @throws BalanceException 
	 */
	public void takeMoney(int money) throws BalanceException{
		//如果余额不足,就抛出自定义异常
		if(balance < money){
			throw new BalanceException("对不起,您账户余额不足");
		}
		this.balance -= money;
		System.out.println("账户"+name+"的余额是"+balance);
	}
}
public class TestBank {

	@Test
	public void testBankAccount(){
		//创建银行账户
		BankAccount account = new BankAccount("恒哥",10000);
		account.saveMoney(1000);
		//处理异常
		try {
			account.takeMoney(10000);
		} catch (BalanceException e) {
			e.printStackTrace();
		}
	}
}

終わり

割り当て:
学生クラスの定義、名前、年齢、性別属性、学習メソッドの
定義メソッドの定義、メソッドに名前、年齢、性別を
入力して、学生オブジェクトの性別入力エラーを作成します。RuntimeExceptionがスローされ、情報が含まれます。男性または女性
年齢が正しく入力されていない場合、RuntimeExceptionがスローされ、情報が含まれます。年齢は18〜30歳である必要があります。メソッドで
RuntimeExceptionを宣言するには、throwsを使用し
ます。メソッドを呼び出すときは、try-catchを使用して例外を処理します。


他のJavaの知識を学ぶ必要がある場合は、ここでJavaの概要に関する非常に詳細な知識を調べてください。

おすすめ

転載: blog.csdn.net/u013343114/article/details/112676142