576 次浏览
  • JVM
  • 异常
    • Exception的直接子类:编译时异常,要求程序员在编写阶段预先对该异常进行处理,如不处理,编译器报错。//别称:受检异常、受控异常
      • 一个编译时异常的处理例子:
        1. throws上报给方法调用者,(main throws ClassNotFoundException)
        2. try…catch捕捉,(try{doSome()}catch(ClassNotFoundException){e.printStackTrace();})//e 引用保存new出来的异常对象的内存地址
      • 注:
        1. 异常未捕捉,默认采取上报方式,此方法后续代码不会执行//eg:main收到异常,未进行处理抛给jvm,jvm终止程序运行
        2. try中的某一行出现异常,该行后面的代码不会执行
        3. try…catch捕捉异常后,后续代码可执行。
        4. catch后面的小括号,类型可以是具体的异常类型, 也可以是父类型
        5. catch 可以写多个,有利于精准调试//从上到下,从小到大 ,8以后用|分割
    • RuntimeException:运行时异常,编写程序阶段程序员可以预先处理,也可以不管。//未受检异常、非受控异常
    • 所有异常都在程序运行时发生,仅仅在程序运行阶段才可以new对象//异常发生就是new异常对象。
    • 异常两个重要方法
      • String getMessage()返回异常信息的详细消息字符串
      • void printStackTrace()追踪堆栈异常信息(采用异步线程)
    • finally字句
      • 是代码中最后执行的,一定会执行,即使try语句块中的代码出现了异常
      • finally字句必须和try一起出现,不能单独编写
      • 通常使用:
        • 在finally中完成资源的释放和关闭
        • try…finally可以联合使用
        • System.exit(0)可以终止finally//退出JVM
      • finally和final finalize 区别
        • final 
          1. final修饰的类无法继承
          2. final修饰的方法无法覆盖
          3. final修饰的变量不能重新赋值
        • finally
          • 可以和try联合使用
          • 语句块中的代码是必须执行的
        • finalize
          • 是一个Object类中的方法名
          • 由垃圾回收器GC负责调用
    • 自定义异常
      1. 编写一个类继承Exception或者RuntimeException
      2. 提供两个构造方法,一个无参数,一个带有String参数
    • 方法覆盖,问题
      • 重写后的方法不能比重写前方法抛出更多,更广泛的异常,可以更少(复制一份,重写即可)
  • 操作数栈
  • 表达式和语句
  • 参数校验

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注