首页 > 技术文章 > Java 异常与错误

liangls 2020-04-22 17:36 原文

异常

  • 定义:

    软件程序在运行过程中,非常可能遇到意外问题,就叫异常(Exception),例如文件找不到,非法参数,网络连接失败等;

  • 异常的分类:

    • 检查性异常:

      用户错误或问题引起的异常,例如:打开一个不存在的文件

    • 运行时异常:

      运行时被忽略的异常

    • 错误(Error):

      错误不属于异常,脱离程序员控制的问题,例如:栈溢出等

  • 异常体系结构:

     

    Java异常可以当做对象来处理

  • Java异常处理机制:

    • 处理异常

      • 捕获异常

        例如:

        public class Demo{
           public static void main(String[] args){
               int a = 6,b = 0;
               try{
                   System.out.println(a/b);
              }catch(ArithmeticException e){
                   System.out.println("程序发生错误,含有非法参数,除数不能为零");
                   //e.printStackTrace(); 打印程序捕获到的错误信息
              }finally{
                   System.out.println("程序无论是否发生异常,都会执行finally内的语句");
              }
          }
        }

        注意:程序中可以用多个catch来捕获,但是有层层递进的关系,捕获需遵循从小到大的递进关系;

      • 抛出异常

        方法中处理不了这个异常可以抛给上一级,由上一级捕获处理

        public double multiplies(double a,double b) throws ArithmeticException{ //抛出异常
           if(b == 0 ){
               throw new ArithmeticException(); //主动抛出异常,在方法中使用
          }
           return a/b;
        }

         

    • 自定义异常

      • 继承Exception类

        public class demo extends Exception {
           //自定义异常代码,一般还需要重写toString方法
        }

         

  • 总结:

    • 处理运行时异常,采用逻辑去合理规避同时辅助try-catch处理

    • 在多重catch块后面,可以加一个catch(Exception)来处理可能被遗漏的异常

    • 对于不确定的代码,也可以加上try-catch,处理潜在的异常

    • 尽量处理异常,切记只是简单的调用printStackTrace()去打印输出,增加一些处理异常的代码

    • 具体如何处理异常,需根据实际需求和异常类型去决定

    • 尽量添加finally语句块去释放占用的资源

推荐阅读