1.异常的概述:就是一种不正常现象
2.异常的分类:(记忆)
error: 不可抗拒的,比如地震,海啸,非典,艾滋--> (系统偏底层)
exception:
1. 编译时期异常
在编译期间就必须要处理 : sdf.parse 格式转换编译期异常
1.自己动手丰衣足食
2.把这个错误丢给jvm(不建议)
2. 运行时期
1.空指针异常
2.并发修改异常
3.异常产生的整个流程(理解)
1. 哪个方法内存出了错,jvm 就在对应的地方产生一个异常
2.该方法中是否已经处理了这个异常 try catch
3.如果没有 ,抛给调用者 调用者也需要去看一看是否处理了这个异常try catch
最终就抛给jvm
jvm 处理的方案:
1. 打印这个错误
2. 终止程序的运行
4. throw(声明抛出异常) 【4,5,6熟练使用】
书写在方法内部
throw 一次只能抛出一个异常
5.throws(解决异常的方案之一)
方法声明上
一次可以在方法声明上丢出多个异常
6.try catch (可以捕获一个,也可以捕获多个异常)
父类的异常只能写在子类异常之后
其他:理解
注意:异常最好是进行捕获操作,不要将其直接丢给jvm(1.打印 ,2.程序终止)
捕获异常的细节
1.可以抛出父类异常 简写成 throws Exception
2.如果写上以上方式,那么在捕获时,就无法针对某一个具体的异常进行一个具体的处理
举例:1. 库存不足异常 2.商品过期异常
3.针对所有异常,在实际开发过程中,都需要进行捕获,业务异常需要专门单独处理,其他的异常比如空指针,或者角标越界等异常 ,不需要
子父类异常的注意事项
1.子类抛出的异常可以和父类 一致
2.子类抛出异常必须是父类的子异常或者异常本身
3.子类可以不抛出异常
4.父类没有异常,子类也不能抛出异常 (如果此时子类有异常,只能try catch 捕获)
如何自定义一个异常
1.书写一个类,继承 Exception 或 RuntimeException
实际开发过程中: 寫Exception
2.提供他的有参和无参构造方法,在其内部调用super()
### 面试题
finally ,finalize ,final 三者之间的区别
final :
1. final修饰类:类不可被继承
2. final 修饰变量: 不可被修改
3. final 修饰方法: 不可被重写
finalize:
finally : 一定会被执行的代码
finally有return 是什么情况
返回的是finally 中的值
多线程:
并发:同一时间段在交替的执行
并行:同时(同一时刻)执行
举例:吃饭
一盘菜夹一筷子
一口一桌子来一下
|
|