java学习笔记_进阶008

异常

  • java语言中异常是以什么形式存在的呢?

    • 1.异常在java中以类的形式存在,每一个异常类都可以创建异常对象

      • 类是模板,对象是实际存在的个体
  • java中异常处理机制

    • 异常在java中以类和对象的形式存在,那么异常的继承结构是怎样的?
      • 可以使用UML图来描述一下继承结构

        • 什么是UML?有什么用?
          • uml是一种统一建模语言,一种图标式语言(画图的)

          • uml不是只有java中使用,只要是面向对象的编程语言,都有UML

          • 一般画uml图的都是软件架构师或者是系统分析师,这些级别的人员使用的。软件设计人员使用UML

          • 在uml图中可以描述类和类之间的关系,程序执行的流程,对象的状态等等

  • Object下有Throwable(可抛出)

    • Throwable下有两个分支:error(不可处理,直接退出JVM),和exception(可处理)
    • exception下有两个分支
      • exception的直接子类:编译时异常(要求程序员在编写程序阶段必须预先对这些异常进行处理,如果不处理编译器报错,因此得名)
      • runtimeexception:运行时异常(在编写程序阶段,程序员可以预先处理,也可以不管,都行
  • 编译时异常和运行时异常,都是发生在运行阶段,编译阶段异常是不会发生的。

  • 编译时异常因为什么而得名?

    • 因为编译时异常必须在编译(编写)阶段预先处理,如果不处理编译器报错,因此得名。所有异常都是在运行阶段发生的,因为只有程序运行阶段才可以new对象。
  • 编译时异常和运行时异常

    • 编译时异常一般发生的概率比较高
    • 运行时异常一般发生的概率比较低
  • 编译时异常还有其他名字

    • 受检异常— CheckedException
    • 受控异常
  • 运行时异常还有其他的名字

    • 未受检异常— UnCheckedException
    • 非受控异常
  • 所有的异常都是出现在运行阶段的

  • java语言中对异常的处理包括2种方式

    • 第一种方式:在方法声明的位置上,使用throws关键字
    • 第二种方式:使用try … catch… 语句进行异常的捕捉
  • 一般不建议在main方法上使用throws,因为这个异常如果真正的发生了,一定会抛给JVM.JVM只有终止

    • 异常处理机制的作用就是增强程序的健壮性。怎么能做到,异常发生了也不影响程序的执行,所以一般main方法中的异常建议使用try…catch…进行捕捉。main就不要继续上抛了。
  • 深入了解try…catch…

    • catch后面的小括号中的类型可以是具体的异常类型,也可以是该异常类型的父类型
    • catch可以写多个,建议catch的时候,精确的一个一个处理,这样有利于程序的调试
    • catch写多个的时候,从上到下,必须遵守从小到大
  • 异常对象有两个非常重要的方法:

    • 获取异常简单的描述信息
      • String msg = exception.getMessage();
    • 打印异常追踪的堆栈信息— 在实际的开发中,建议使用这个
      • exception.printStackTrace();
  • 关于try…catch中的finally子句:

    • 在finally子句中的代码是最后执行的,并且是一定会执行的,即使try语句块中的代码出现了异常
    • finally语句通常使用在哪些情况下?
      • 通常在finally语句块中完成资源的释放/关闭
      • 因为finally中的代码比较有保障,即使try语句中的代码出现异常,finally中的代码依旧可以继续执行。
  • java中的语法规则(有一些规则是不能破坏的,一旦这么说了,就必须这么做)

    • java中有一条这样的规则:
      • 方法体中的代码必须遵循自上而下顺序依次逐行执行(亘古不变的语法)
    • java中还有一条语法规则
      • return语句一旦执行,整个方法必须结束(亘古不变的语法)
  • final finally finalize有什么区别

    • final是一个关键字,表示最终的,不变的
      • final修饰的类无法继承,final修饰的方法无法覆盖
    • finally也是一个关键字,和try联合使用,使用在异常处理机制中
      • 在finally语句块中的代码是一定会执行的
    • finalize()是object类中的一个方法,作为方法名出现,所以finalize是标识符
      • finalize()方法是JVM的垃圾回收器负责调用
  • java中怎么自定义异常呢

    • 第一步:编写一个类继承Exception或者RuntimeException
    • 第二步:提供两个构造方法,一个无参数的,一个带有String参数的
  • throws:在方法声明位置上使用,表示上报异常信息给调用者

  • throw:手动抛出异常

上一篇:Java零基础(11)异常处理


下一篇:java基础:异常处理和泛型