[Javaの]例外処理

、Javaの例外は、
異常プログラムの基本的なエラーではなく、すべてのエラーは異常と間違っ時々避けるべきです。
1.処理の例外...他にあれば...

package edu.xalead;

public class Caculate {
    private static boolean isNum(String num) {
        for (int i = 0; i < num.length(); i++) {
            char t = num.charAt(i);
            if (t < 48 || t > 57) {
                return false;
            }
        }
        return true;
    }

    /**
     * 主函数的中的String是声明一个字符变量
     * 参数args是用来接收命令行参数的行参数的
     *
     * @param args
     * 如:对两数求商
     */
    public static void main(String[] args) {
        if (args != null && args.length >= 2) {
            String num1 = args[0];
            String num2 = args[1];
            if (isNum(num1) && isNum(num2)) {

                /**
                 * 字符串中的一种用法,将字符串转换成数值
                 */

                int n1 = Integer.parseInt(num1);
                int n2 = Integer.parseInt(num2);
                if (n2 != 0)
                    System.out.println(n1 / n2);
                else
                    System.out.println("除数不能为0");
            } else {
                System.err.println("两个参数必须是数字");
            }
        } else {
            System.out.println("必须有命令行参数,且参数个数为两个");
        }
    }
}

例えば、上記のコードは、私たちが明らかに例外を処理し、文... ... ELSEつのハンドルの例外ずつ場合の多くを必要とする、コードがあまりにも冗長であるので、元の設計におけるJava言語は、これらの問題のアカウントへの例外処理の枠組みを取るためにスキームは、すべての例外は、サブクラスに対応する異常の異なる種類のタイプを表すために使用することができます。
2.トライ...キャッチ...例外処理の捕捉
一般構造
試みを{
  プログラムコード
  }キャッチ(異常の種類の例外変数名){
  プログラムコード
  }キャッチ(例外タイプ2異常変数名2){
  }
基本的なプロセスであります例外がtryブロックで発生した場合、例外がスローされたcatchブロックコードを捕捉することができ、例外処理、監視対象文のtryブロックに入れられ、また、システムの一部に異常を発生させるために自動的にJavaランタイムでスロー。
マッチ複数の上の一、異常の複数の照合にcatchステートメントを複数有していてもよく、キャッチブロックが場合にのみ異常一致行われる行います。
以下のような:

 public static void main(String[] args) {
        try {
            String num1 = args[1];
            String num2 = args[1];
            int n1 = Integer.parseInt(num1);
            int n2 = Integer.parseInt(num2);

            System.out.println(n1 / n2);
        }catch (ArrayIndexOutOfBoundsException e){//数组越界异常
            e.printStackTrace();//打印栈帧中的信息
        }catch (NumberFormatException e){//数字格式化异常
            e.printStackTrace();
        }catch (ArithmeticException e) {//数学异常
            e.printStackTrace();
        }
    }

キャッチをキャプチャするために、単に使用状況を監視しようとしている
。3.上記の3つの基本クラスが異常例外で
例外階層(1)
ここに画像を挿入説明
エラーは、我々は、このような仮想マシンのエラーなどの例外を処理することはできません。
例外は、我々が扱うことができるということです取り扱い、実行時例外はRuntimeExceptionである異常、必須ではなく、コンパイルされません処理
等:
制御異常、無操作例外
ここに画像を挿入説明
売却を
ここに画像を挿入説明
(2)一般的な例外
ヌルポインタ例外:

 public static void main(String[] args) {
        String s = null;
        System.out.println(s.length());
    }

ここに画像を挿入説明
Bクラスの変換例外

public class Animal {
}

public class Bird extends Animal {
    public void out(){
        System.out.println("A");
    }
}

public class Fish extends Animal {
    public void in(){
        System.out.println("鱼");
    }
}

テスト

public static void main(String[] args) {
        Animal a = new Bird();
        /**
         * 父类引用只能调用自己的东西,不能调用子类的东西
         * 如果想要调用子类的东西,只能将父类引用强制转换成子类,才能调用子类方法
         */
        ((Bird) a).out();
        a = new Fish();
        ((Fish) a).in();
        /**
         * 代码执行到这里,a保存的是Fish,Fish里面没有out方法
         * 所以这行错误
         */
        ((Bird) a).out();

    }
}

(クラスキャスト例外)異常
ここに画像を挿入説明
キーワードスローと例外をスロー:

public class 抛出关键字 {
    public static void main(String[] args) {
        try {
            String num1 = args[0];
            String num2 = args[1];

            int n1 = Integer.parseInt(num1);
            int n2 = Integer.parseInt(num2);
            if(n2 == 5){
               throw new RuntimeException("我这里除5也不行");//用new给异常对象分配内存
            }
            System.out.println(n1 / n2);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

おすすめ

転載: blog.csdn.net/weixin_44084434/article/details/90477442