异常处理总结

概况

总的来说异常分为两种:一、cheked Exception(检查异常),此异常在编译时候就会检测出来,我们必须进行捕获处理。二、unchecked Exception(非检查异常),此异常是在运行期才会抛出。例如我们常见的NullPointerException、IndexOutOfBoundsException等。

分析

对于这两种异常,它是什么情况下才会出现呢?我们又该怎么处理呢?

一、编译时出现的异常

    1、由底层jdk向上抛出的异常,当我们在用IO流时如:

FileInputStream in = new FileInputStream(file);

2、由我们自己在代码块抛出异常如:

if(true){
        throw new Exception();
    }

编译时对于上述两种情况,我们必须强制处理该异常,方法一:就是对异常代码块进行try{}…catch{} 方法二就是把异常继续向上抛 throws  **Exception,如下示例:

public void exampleA() {
        
        File file = new File("D:" + File.separator + "**.txt");
        try {
            FileInputStream in = new FileInputStream(file);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
    
    public void exampleB() throws FileNotFoundException {
        
        File file = new File("D:" + File.separator + "**.txt");
        FileInputStream in = new FileInputStream(file);
    }

二、运行时出现的异常。

1、由于我们代码逻辑不谨慎或者其它原因造成,如NullPointerException

2、我们人为的抛出异常,如继承了RuntimeException的自定义异常。

这种运行时异常在编译的时候我们是发现不了的,但是在运行期一旦出现,它也会中断程序的执行,这种无形中的bug,更加可怕,因此通常对运行时可能出现的异常,我们也将进行try{}。。。catch{}处理。

 

 

异常设计的建议

  1. 只在必要使用异常的地方才使用异常,不要用异常去控制程序的流程

  2. 切忌使用空catch块

  3. 检查异常和非检查异常的选择

  4. 注意catch块的顺序

  5. 不要将提供给用户看的信息放在异常信息里

  6. 避免多次在日志信息中记录同一个异常

  7. 异常处理尽量放在高层进行

  8. 在finally中释放资源

 

参考资料:http://www.cnblogs.com/dolphin0520/p/3769804.html

posted @ 2016-01-14 18:02  姩澕  阅读(172)  评论(0编辑  收藏  举报