Java ---例外

Java-例外

いわゆる例外は、実際にはプログラムの実行時に発生する突然の状況であり、既知または未知の問題を引き起こします。
ある日突然、交通事故で渋滞が発生し、会社に間に合わなかったり、途中で故障してレッカー車としか呼べなくなったりします。このように見ると、あなたはかなり不運です、ハハ...

では、コードに戻って次のコードを見てみましょう。
ここに画像の説明を挿入
通常の状況では問題はなく、正常に実行できますが、分母を0にできないという特殊なケースを考慮しましたか?次のエラーが表示されます。
ここに画像の説明を挿入
では、どうすれば解決できますか?実際、これまでに学んだ知識で問題を完全に解決することはできますが、コードが肥大化し、抜け穴を塞ぐのに手間がかかるため、この問題点をより適切に解決するために、例外処理メカニズム
これが例外処理についての考え方です。例外処理
ここに画像の説明を挿入
ここに画像の説明を挿入
の基本構造:
1.try-catch
2.try-catch-finally
3.try-finally(あまり使用されていません)

public void method(){
	try{
		//代码段1
		//代码段2,会产生异常的代码
		//代码段2
	}catch(异常类型 e){
		//代码段4,对异常进行处理的代码段
	}finally{
		//代码段5,不管有没有异常,都会执行的代码段
	}
}

try {}例外を生成する可能性のあるコードセグメントを配置し、
catch {}例外が発生した場合に処理する必要のあるコードセグメントを配置し、
最後に{}問題ではなく、異常かどうかに関係なく
実行されます[注:finallyコードブロックが実行されます(強制的に中断されない限り)例:exit(-1))
catchブロックにリターンがあり、最初にリターンを実行してから、finallyブロックを実行します]
例を見てみましょう

//输入其他数字提示信息,输出非数字,显示异常,输入1~3则输出对应课程
System.out.println("请输入课程编号(1~3):");
        Scanner sc = new Scanner(System.in);
        int a = 0;
        try {
            a = sc.nextInt();
            switch (a){
                case 1:
                    System.out.println("C++");break;
                case 2:
                    System.out.println("Java");break;
                case 3:
                    System.out.println("Python");break;
                default:
                    System.out.println("别瞎输");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            System.out.println("欢迎提出建议");
        }

結果は次のことを示しています。
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

例外処理の3つのケース
1。通常の状況:通常通りに通過しようとしますが、catchブロックに入らず、finallyブロックに入り、下向きに実行し続けます
2プログラムは異常でキャッチされています。tryブロックは例外が発生した位置に移動し、catchブロックに入り、finallyブロックに入り、下向きに実行を続けます。
3プログラムには例外があり、キャッチされません。tryブロックは例外が発生した場所に移動し、finallyブロックに入り、下向きに実行を続けます。

キャッチされた例外に対処する方法は?キャッチコードブロックには何を書くべきですか?
1.ユーザー定義の出力プロンプト情報
たとえば、次のようにするSystem.out.println(「配当することはできません0」);
2.e.printStackTrace();
3.e.getMessage();
ここに画像の説明を挿入
共通例外:レッツさんが
ここに画像の説明を挿入
取ります例:

Scanner sc = new Scanner(System.in);
System.out.println("请输入两个数");
try {
    int a = sc.nextInt();
    int b = sc.nextInt();
    System.out.println(a / b);
}catch (ArithmeticException e){
    //System.out.println(e.getMessage());     //两种处理异常方式,或者自己打印
      e.printStackTrace();
}catch (InputMismatchException e){
    //System.out.println(e.getMessage());
      e.printStackTrace();
}
System.out.println("程序运行结束");

結果は次のことを示しています。
ここに画像の説明を挿入
例外システムの構造例外の最上位の親クラスはThrowableクラスであり、Objectはその親クラスです。Throwableクラスには、ErrorとExceptionの2つのサブクラスがあります。例外は、CheckedExceptionとRuntimeExceptionの2つのカテゴリに分類されます。
ここに画像の説明を挿入
しかし、例外を処理したくない場合はどうすればよいでしょうか。もちろん、ポットを他の人に投げることです。例外をスローします。
ここに画像の説明を挿入
ここに画像の説明を挿入
例えば:

/**
 * @Author shall潇
 * @Date 2021/1/21
 * @Description     抛出异常-对年龄进行输入1~100,正常输出,其他则抛出并处理。
 */
public class User {
  private int age;      //定义年龄

    public int getAge() {
        return age;
    }

    public void setAge(int age)  {
        if(age>100|| age<1){
            throw new RuntimeException("年龄不符合规定");      //抛出异常
        }
        this.age = age;
    }

    public static void main(String[] args)  {
        User user = new User();
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入年龄");
        try {                                               
            int a = sc.nextInt();
            user.setAge(a);								//处理异常
            System.out.println(user.getAge());
        }catch (Exception e){
            System.out.println("输入不合理");
        }
    }
}

結果は
ここに画像の説明を挿入
もちろん、例外タイプをカスタマイズできます。最初にThrowableクラス、ExceptionまたはRuntimeExceptionを継承し、後者の2つをお勧めします。次に、異常な情報を表示します。
次に、独自の例外継承RuntimeExceptionをデモンストレーションして構築します

//自定义年龄异常
public class AgeException extends RuntimeException{
    public AgeException(String message) {
        super(message);
    }
}

public class User {
  private int age;      //定义年龄

    public int getAge() {
        return age;
    }

    public void setAge(int age)  {
        if(age>100|| age<1){
            throw new AgeException("年龄不符合规定");      //抛出异常
        }
        this.age = age;
    }

    public static void main(String[] args)  {
        User user = new User();
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入年龄");
        try {                                               //处理异常
            int a = sc.nextInt();
            user.setAge(a);
            System.out.println(user.getAge());
        }catch (Exception e){
            System.out.println("输入不对");
        }

    }
}

結果は上記と同じで、スクリーンショットは撮影されません。

おすすめ

転載: blog.csdn.net/qq_43288259/article/details/112943284