- JVM
- 异常
- Exception的直接子类:编译时异常,要求程序员在编写阶段预先对该异常进行处理,如不处理,编译器报错。//别称:受检异常、受控异常
- 一个编译时异常的处理例子:
- throws上报给方法调用者,(main throws ClassNotFoundException)
- try…catch捕捉,(try{doSome()}catch(ClassNotFoundException){e.printStackTrace();})//e 引用保存new出来的异常对象的内存地址
- 注:
- 异常未捕捉,默认采取上报方式,此方法后续代码不会执行//eg:main收到异常,未进行处理抛给jvm,jvm终止程序运行
- try中的某一行出现异常,该行后面的代码不会执行
- try…catch捕捉异常后,后续代码可执行。
- catch后面的小括号,类型可以是具体的异常类型, 也可以是父类型
- 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
- final修饰的类无法继承
- final修饰的方法无法覆盖
- final修饰的变量不能重新赋值
- finally
- 可以和try联合使用
- 语句块中的代码是必须执行的
- finalize
- 是一个Object类中的方法名
- 由垃圾回收器GC负责调用
- final
- 自定义异常
- 编写一个类继承Exception或者RuntimeException
- 提供两个构造方法,一个无参数,一个带有String参数
- 方法覆盖,问题
- 重写后的方法不能比重写前方法抛出更多,更广泛的异常,可以更少(复制一份,重写即可)
- Exception的直接子类:编译时异常,要求程序员在编写阶段预先对该异常进行处理,如不处理,编译器报错。//别称:受检异常、受控异常
- 操作数栈
- 表达式和语句
- 参数校验
576 次浏览