← 返回首页
JavaSE系列教程(五十九)
发表时间:2020-02-06 13:08:12
讲解java异常处理要遵循的原则和自定义异常。

我们知道java的异常处理机制分为使用try-catch-finally捕获和使用throws声明抛出异常,但是需要遵循一定的捕获原则。

1.异常处理要遵循的原则

1)先捕获子类异常再捕获父类异常。

例如:

     try{
           Class.forName("com.test.HelloWorld");
           SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
           Date d = sdf.parse("2020-10-abc");
           System.out.println(100/0);
       }catch(ClassNotFoundException ex){
           ex.printStackTrace();
       }catch(ParseException ex){
           ex.printStackTrace();
       }catch(Exception ex){
           ex.printStackTrace();
       }

2)方法重写时,子类不能抛出比父类范围更大的异常。 例如:

class Father{
    public void fn() throws ClassNotFoundException{
        Class.forName("com.test.Father");
    }
}

class Son extends Father{
    /*
    @Override
    public void fn() throws Exception {  //错误,方法重写时子类不能比父类更大的异常
        super.fn();
    }*/

    //子类可以抛出与父类相同的异常或者是父类异常的子类。 
    @Override
    public void fn() throws ClassNotFoundException{ 
        super.fn();
    }


}

2.自定义异常

最简单的Java自定义异常就是创建一个类,继承自Exception,重写它的构造方法;具体代码如下:

public class MyException extends Exception{
//此处可以换成其他的异常列:NumberFormatException,ArithmeticException,RuntimeException
    public MyException (){

    }
    public MyException (String str){ 
       //此处传入的是抛出异常后显示的信息提示
            super(str);
    }
}

重写后抛出异常代码:

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入一个正整数:");
        try {
            int num1 = scanner.nextInt();
            if(num1<0){
                throw new MyException("错误!输入数据为负数。");
            }

        } catch (MyExceptione) {
            e.printStackTrace();
        }catch (Exception e) {
            e.printStackTrace();
        }
    }

小结:

1).java的要捕获要遵循以下原则,A.先捕获子类异常再捕获父类异常。B.方法重写时子类不能抛出比父类更大的异常。

2).通过继承Exception类实现自定义异常类。