异常
1、什么是异常?
程序没有按预期运行就叫异常。
2、为什么要学习异常?
为了更好的解决异常情况。
3、异常分类
throwable
Error:错误,指的是无法被处理的异常,也不需要程序员去处理该类问题。
OutOfMemoryError
StackOverflowError
Exception:异常
编译时异常(受检查异常checkedException):编译期间就需要处理的异常,不处理编译会报错。
IOException
...
运行时异常(不受检查异常runtimeException):在运行期间可能会出现,编译时不需要处理。
ArithmeticException
空指针异常
数组下标越界异常
类型转换异常
...
4.异常处理
throws:声明异常,向上抛出,不处理异常,交给上一级处理。一般用在方法声明之上
throw:主动抛出异常,用在方法中
try catch:捕获异常,即处理异常。
try代码块放可能会抛出异常的代码。catch代码块只有try捕获到对应异常才会进入。
一个try可以支持无限个catch代码块。catch代码块一定要有处理,哪怕是打印控制台。
finally:不能单独使用,必须和try或try catch一起使用。
5.异常注意事项
- 运行时异常被抛出可以不处理,由JVM处理。
- 多个catch块捕获多个异常且有父子关系时,子类的捕获在前面,父类的捕获在后面。
- 如果finally有return语句,永远返回finally中的结果
- 子类重写父类方法时,子类不能抛出比父类更宽泛的的异常,可以不抛出异常
- 子类不能抛出比父类更多的异常
6.常见异常
NullPointerException
ClassNotFoundException
NumberFormatException
StackOverflowError
ClassCastException
IOException
RuntimeException
7.自定义异常
什么要用自定义异常?
可以更精准的抛出异常,方便进行异常排查
案例:提供一个设置年龄的方法,年龄只能在0-150范围内,超出则抛出异常
自定义编译时异常:Exception
自定义运行时异常:RuntimeException
8.如何排查异常
9.File类
表示文件/目录。
10.IO流
IO流代表进出流,I是in的意思,o是out意思。
案例:
1.将字符串hello io写到c:/a.txt中(O流)
案例:
2.将c:/a.txt复制到d:/a.txt(IO流)
案例:
3.将c:/a.txt中的内容读取到String s中(I流、IO流)
什么是序列化和反序列化?
序列化:将Java中的对象转为二进制数据或文件的过程叫序列化
反序列化:将二进制数据或文件转为Java中的对象的过程叫反序列化。
什么是深克隆什么是浅克隆,它们的区别是什么?
浅克隆:浅克隆即克隆出的对象中的引用数据类型属性会指向原本对象的引用数据类型属性的地址。实现Clonable接口,重写clone方法
深克隆:深克隆即克隆出的对象中的引用数据类型属性不会指向原本对象的引用数据类型属性的地址。反序列化实现
获取项目中的路径的三种方式
1.获取某个类同包下的资源(Bin目录下)
类名.class.getResourceAsStream("资源名称");
2.获取项目中bin目录下的资源(Bin目录下)
类名.class.getClassLoader().getResourceAsStream("资源名称");
3.获取项目根目录
System.getProperty("user.dir");



