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("输入不对");
}
}
}
結果は上記と同じで、スクリーンショットは撮影されません。