一 异常(Throwable)?
1 运行时出现的非正常现象
2 性质分类
错误(error)和异常(Exception)都继承Throwable
3 区别:
Error 不可控,系统错误,或底层资源错误,系统级别捕捉
Exception 可能可控,程序员导致的错误,程序级别处理
4 异常处理关键字
try–catch–throw–throws–finally
4.1 try–catch-finally,代码块内部,不能单独使用,必须有try,分别独立 不能相互访问
4.2 可以多catch,类似于switch case
4.3 throw,方法体内部,用来抛出一个Throwable异常,如果抛出异常,则还应该在头部声明,也就是需要在方法上声明throws(见下),如果全部是层层上抛,最终会给JVM处理,打印异常信息和堆栈信息,如果抛出Error或RunTimeException,则调用者可以处理该异常。
4.4 throws,方法体外部,用来声明方法可能会抛出的一个异常,只有抛出异常,方法的调用者才回去处理或者重新抛,当方法调用者处理不了,则继续向上抛出
5 常见异常问题
5.1 庞大的try块
根据实际应用合理检测异常个数
5.2 异常的完整性
如果抛出(throw)一个异常,那么必须有catch来捕获它,如果函数内部不进行catch处理,那么就必须在方法体中标注(throws)这个异常。这个意思是对外表示我这个方法可能会抛出这个异常。
5.3 RuntimeException
可以由程序员避免:空指针,数组越界,除数为0,非法参数,强转错误
二 关键字区分 final,finally和finalize
1. final
不可被修改,继承
1.1 定义变量
- 初始化在定义出或者构造函数中,只取其一
- 两层含义
对于基本类型,数值不可修改
对于对象变量,引用不可修改
1.2 定义方法
原因是因为这个方法不需要被扩展,所以不支持继承
1.3 定义类
final类不可被继承,
类内方法也为final方法
类内变量,可以使final,也可以不是
不能声明abstract(抽象)
2. finally
- 异常处理语句,可有可无
- finally结构代码在异常处理时总会执行
- 可以维护对象内部状态,清理费内存资源
3. finalize
- 方法名,在Object类中定义,所以所有的类都继承了他
- 在垃圾回收机制清除内存前做必要的清理工作
- 只能运行一次
- 用于一些不容易控制,而且非常重要的资源释放
程序本身释放为主,finalize函数释放为辅,双保险管理