Java中的异常处理

异常定义

  异常 - 程序中的错误。

    编译时异常 - 编译时出现的错误;

    运行时异常 - 程序运行时发生的错误,程序会终止于发生错误的语句;

  Throwable 类 是所有Java异常 的 父类 ;Error 类(不讨论,无法挽救)、 及 Exception 类 是其子类;

异常分类

  1、非检查性异常 - 在编译时不检查该错误,只在运行时才会发生;也就是说,如果程序中的某条语句有潜在的发生

    非检查性异常的风险时,程序还是会通过编译的;所有RuntimeException以及其子类的异常都属于非检查性异常;

  2、检查性异常 - 除了 RuntimeException之外的 Exception的子类异常 都是检查性异常;检查性异常必须处理,否则不会通过编译;

异常处理

  1、自行处理

 1 try{
 2     //try块
 3     //有可能发生异常的语句,放到try块中运行;
 4     //如果try块中没有发生异常,try运行结束后,会继续catch后面的代码运行;
 5     //如果一旦发生异常。程序就会中止于发生错误的语句,根据异常种类,继续到catch块中去运行;
 6     }catch(Exception e){
 7         //catch块
 8         //任一catch块运行完以后,所有catch捕捉结束,会继续运行catch后面的代码;
 9         //Exception e 作为兜底,当有其他catch语句时,exception e 必须放在最后;
10     }finally{
11         //必须执行的代码;即使try块中有return语句或者break语句跳出循环;
12         //收尾工作的代码;比如说关闭打开的文件、关闭网络连接、关闭数据库连接;
13         //除非使用了System.exit(0)语句时,finally代码块中的内容不被执行;
14 }    

  2、向上抛出 - throws

    throws - 声明方法有可能会抛出什么类型的异常;

     - 由方法的调用者进行异常处理;

自定义异常

  throw - 用法格式: throw 异常对象;

      throw new 自定义异常类名();

总结

  思考:何时使用throw向上抛出,何时使用try、catch自行处理?

    其实只要稍稍换位思考,这个问题不难回答,如果方法层的上一层需要知道是否发生了异常,则向上抛出;

    如果方法层的上一层只需要返回结果,并不需要知道是否发生过异常,则try、catch处理。

原文地址:https://www.cnblogs.com/coffeerun/p/5733179.html