## 添加处理异常的手段
处理异常不是 异常消失了
处理异常指的是 处理掉异常之后
后续的代码不会因为此异常而终止执行
两种手段
try{}catch(){}[ finally{} ]
1.try不能单独的出现
2.后面必须添加catch或finally
3.catch有一组括号 (NullPointerException) 目的是为了捕获某一种异常
4.catch可以有很多个存在
捕获的异常之间没有任何的继承关系
捕获的异常需要从小到大进行捕获
5.finally不是必须存在的
若存在finally结构 则必须执行
引申一个小问题: final finally finalize区别
final 特征修饰符 修饰变量 属性 方法 类
修饰变量 基本类型 值不能改变 引用类型
修饰属性 特点与修饰变量类似 (要求必须给属性赋初始值 否则编译报错)
修饰方法 不能被子类重写
修饰类 不能被其他的子类继承
finally 处理异常手段的一部分
try{}catch(){}后面的一个部分
这个部分可有可无 如果有只能含有一份 且必须执行
finalize 是Object类中的一个protected方法
对象没有任何引用指向的时候 -- 会被GC回收
当对象回收的时候 默认调用finalize方法
若想要看到对象回收的效果 可以重写 public void finalize(){}
6.处理异常放在方法内部 可能还会有小问题
如果在方法内部含有返回值
不管返回值return关键字在哪里 finally一定会执行完毕
返回值的具体结果 看情况
## throws抛出
1.异常只能在方法上抛出 属性是不能处理异常的
2.方法 构造
3.方法可以抛出不止一个异常 通过,隔开
4.抛出的异常与多个catch类似 要么没关系 要么先抛出小异常
## Throwable的分支
Exception Error
运行时
编译时
两种处理异常的手段 try throws
常用的运行时异常 后续见到的编译时异常
我们也可以自己创建异常----自定义异常
1.自己描述一个异常的类
2.让我们自己的类继承
如果继承是RuntimeException---->运行时异常(不需要必须添加处理手段)
如果继承是Exception-------------->编译时异常(必须添加处理手段)
3.创建一个当前自定义异常类的对象
通过throw关键字 主动产生异常
4.当我们设计描述的方法(事情) 之前没有相关的异常能描述我的问题Box
这个时候才会利用自定义异常来描述