异常事件:
Errot:Java虚拟机无法解决的严重问题
如JVM系统内部错误,资源耗尽等严重问题
如:StactOverflowError OOM
一般不便携针对性的代码进行处理
Exception:其他因变成错误或偶然的外在因素导致的一般性问题
如:空指针方法、数组角标越界、网络连接中断、试图读取不存在的文件
分类:编译时异常(Checked)和运行时异常(Unchecked)
异常的处理:(抓抛模型)
过程一:“抛” 程序在正常执行的过程中,一旦出现异常,就会在异常代码处生成一个对应异常类的对象,并将此对象抛出。
一旦抛出对象以后,其后的代码就不再执行
过程二:“抓” 可以理解为异常的处理方式
①try-catch-finally ②throws
try-catch-finally的使用
try{//可能出现异常的代码
}catch(异常类型1 变量名1){//处理异常的方式
}...finally{//一定会执行的代码
}
说明:
1.finally是可选的
2.使用try将可能出现异常代码包装起来,在执行过程中,一旦出现异常,就会生成一个对应异常类的对象,根据此对象的类型,去catch才进行分配
3.一旦try中的异常匹配到catch时,就处理异常,处理完成就跳出当前try-catch结构(没有finally的情况)执行后面的代码
4.父类异常在下,否则报错
5.常见的异常对象处理方式:
①String getMessage ② printStackTrace
6.在try结构中声明变量,只能在try结构中使用
7.try-catch-finally结构可以嵌套使用
finally的使用:
1.finally是可选的
2.finally中声明的是一定会被执行的代码,即使catch中又出现异常了,try中有return语句,catch中有return语句等情况
3.像数据库连接、输入输出流、网络编程Socket等资源JVM是不会自动回收的,我们需要手动的进行资源的释放,此时的资源释放,就要声明在finally里
异常的处理方式二:throws+异常类型
1.写在方法的声明处,指明此方法执行时,可能会抛出的异常类型,一旦当方法体执行时出现异常,仍会在异常代码处生成一个异常类的对象,
此对象满足throws后异常类型时,就会被抛出,异常代码后面的代码不会执行
2.体会:try-catch-finally 解决了异常
throws :没有真正处理异常
3.开发中如何选择使用try-catch-finally还是throws?
①如果父类中被重写的方法没有throws方法处理异常,则子类重写的方法也不能使用throws,意味着如果子类重写的方法中有异常,必须使用try-catch-finally方式处理
②执行的方法中,先后又调用了另外的几个方法,这几个方法是递进关系执行的,我们使用throws
手动抛出异常:
throw new RuntimeException();
如何自定义异常类?
1.继承于现有的异常处理结构 RuntimeException 、Exception
2.提供 serialVersionUID 全局常量
3.提供重载的构造器