异常总结

    1  在java中异常被当作对象来处理,根类是java.lang.Throwable类,异常分为两大类:Error和Exception

    2  Error是无法处理的异常,一般发生这种异常,JVM会选择终止程序,所以编写程序时不需要在意这些异常

    3  Exception类的异常包括checked exception和unchecked exception

    unchecked exception(非检查异常),也称运行时异常(RuntimeException)。对于运行时异常,java编译器不要求必须进行异常捕获处理或者抛出声明,由程序员自行决定

    checked exception(检查异常),也称非运行时异常,java编译器强制程序员必须进行捕获处理,对于非运行时异常如果不进行捕获或者抛出声明处理,编译都不会通过

        在java中,所有异常类的父类时Throwable类,Error类时error类型异常的父类,Exception类是exception类型异常的父类,RuntimeException类是所有运行时异常的父类,RuntimeException以外的并且继承Exception的类是非运行时异常。

    典型的RuntimeException包括NullPointerException、IndexOutOfBoundsException、IllegalArgumentException等。 

    典型的非RuntimeException包括IOException、SQLException等。

4  对异常的处理

    1  try...catch

      try{...}

      catch(异常类名  变量名)

      {异常的处理代码}

      被try块包围的代码说明这段代码可能会发生异常,一旦发生异常,便会被catch捕获,然后在catch块中进行异常处理

    2  throw和thorws  格式  throws 异常类名  //这个格式是跟在方法的括号后面的

        *  如果采用throws,将来谁调用谁处理

          throws                  throw

       用在方法声明后面,跟的是异常类名      用在方法体内,跟的是对象名

       表示抛出异常,由该方法的调用者来处理    表示抛出异常,由方法体内的语句来处理

       表示出现异常的可能性,并不代表一定会有异常     执行throw一定出现了某种异常

       public void checkScore(int score) throws ScoreException

           {

            if(score<0||score>100){

              throw new ScoreExcrption("你给的分数有误");

           }

             else{

             System.out.println("分数正常");

              }

           }

5  finally关键字

    try无法单独使用,必须配合catch或finally使用,java编译器允许的组合形式由以下三种:

      try...catch;    try...finally;  try...catch...finally...

    catch块可以有多个,但是try只能有一个,finally块是可选的(但是最多只能有一个finally)

    三个块执行的顺序是try——catch——finally

      如果没有异常,catch不会执行,但是finally一定会执行(因此部分情况下,都会将释放资源的操作放在finally块中进行)

    在使用try...catch..finally块的时候,千万不要再finally块中使用return,因为finally中的return会覆盖已有的返回值

6  类继承时,方法覆盖时如何进行异常抛出声明

    三点原则:1  父类方法没有生命异常,子类重写该方法时不能声明异常

         2  如果父类的方法声明一个异常exception1,则子类在重写该方法的时候声明的异常不能是exception1的父类;

         3  如果父类的方法声明的异常类型只有非运行时异常(运行时异常),则子类在重写该方法的时候声明的异常也只能有非运行时异常(运行时异常),不能含有运行时异常(非运行时异常)。

7  异常处理和设计的几个建议

  1  只在必要时使用异常,不要用异常去控制程序的流程

  2  切忌使用空catch块

    空的catch块意味着在程序中隐藏了错误和异常,并且很可能导致程序出现不可控的执行结果

  3  注意catch块的顺序

    不要把上层类的异常放在最前面的catch块

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

    展示给用户错误提示信息最好不要跟程序混淆一起,比较好的方式是将所有错误提示信息放在一个配置文件中统一管理。

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

  只在异常最开始发生的地方进行日志信息记录。很多情况下异常都是层层向上跑出的,如果在每次向上抛出的时候,都Log到日志系统中,则会导致无从查找异常发生的根源。

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

  尽量将异常统一抛给上层调用者,由上层调用者统一指示如何进行处理。如果在每个出现异常的地方都直接进行处理,会导致程序异常处理流程混乱,不利于后期维护和异常错误排查。由上层统一进行处理会使得整个程序的流程清晰易懂。

  7  在finally中释放资源

  如果有使用文件读取、网络操作以及数据库操作等,记得在finally中释放资源。这样不仅会使得程序占用更少的资源,也会避免不必要的由于资源未释放而发生的异常情况。  

 

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

posted @ 2021-11-04 21:33  Cuora  阅读(124)  评论(0)    收藏  举报