java 异常处理总结

1.java异常分为两类:编译时异常(checked)和运行时异常(RuntimeException)。

RuntimeException:这种异常时不确定的,不用抛出,编译可以正常通过,例如:1/0

Checked:这种异常需要try—catch或者在方法中throw异常让上级来处理,例如:在程序中写文件操作函数

2.异常处理原则和技巧

1、避免过大的try块,不要把不会出现异常的代码放到try块里面,尽量保持一个try块对应一个或多个异常。

2、细化异常的类型,不要不管什么类型的异常都写成Excetpion。

3、catch块尽量保持一个块捕获一类异常,不要忽略捕获的异常,捕获到后要么处理,要么转译,要么重新抛出新类型的异常。

4、不要把自己能处理的异常抛给别人。

5、不要用try...catch参与控制程序流程,异常控制的根本目的是处理程序的非正常情况。

6、捕获异常时先捕获小异常,再捕获大异常

3.java7 新属性

       1.捕获多种类型的异常时,多种异常类型之间用竖线(|)隔开

       2.捕获多种异常时,异常的变量有隐式的final声明,所以不能对异常变量重新进行赋值

       例如:

public class MultiExceptionTest{
    public static void main(String[ ] args){
        try{
            int a = Integer.parseInt(args[0]);
            int b = Integer.parseInt(args[1]);
            int c = a / b;
            System.out.println("输入两数相除结果:" + c);
        }catch(IndexOutOfBoundsException | NumberFormatException | ArithemticException ie){//(1)
            System.out.println(“程序发生了数组越界、数字格式异常、算数异常之一”);
            //捕获多异常时,异常变量默认有final修饰
            //所以下面代码有错
            ie = new ArithmeticException("test");//(2)
        }catch(Exception e){
            System.out.println("未知异常");
            //捕获一种类型的未知异常时,异常变量没有final修饰
            //所以下面代码完全正确
            e = new RuntimeException("test");//(3)
        }
    }
}

 4、注意事项

1.除非在try块,catch块中调用了退出虚拟机(system.exit(1);)的方法,否则不管在try块,catch块中执行了怎样的代码,出现怎样的情况,异常处理的finally块总被执行

 2.一旦在finally块中使用了return或throw语句,将会导致try块,catch块中的return,throw语句失效

 3.如果main方法不知道如何处理这种类型的异常,throws异常后会将异常交给JVM处理

 4.子类抛出的异常范围要比父类小

原文地址:https://www.cnblogs.com/liuwanqiu/p/7802630.html