异常
1、什么是异常
哪些不是异常
语法错误
逻辑错误
不可预知的非正常的情况
例如:网络中断,用户不合适的输入,硬盘已满,操作系统崩溃,内存溢出等
2、异常的体系结构
java.lang.Throwable
所有异常和错误的超类
(1)只有这个类型或它子类的对象才能被“抛出”
(2)只有这个类型或它子类的对象才能被“捕获”
分为两大类
java.lang.Error
严重
例如:VirtualMachineError
StackOverflowError
OutOfMemoryError 简称OOM 如何解决:设计合理,修改JVM参数
java.lang.Exception
运行时异常RuntimeException
空指针异常:NullPointerException
数组下标越界异常:ArrayIndexOutOfBoundsException
类型转换异常:ClassCastException
算术异常:ArithmeticException
数字格式化:NumberFormatException
编译时异常,受检异常
在编译阶段必须要求你编写代码去处理,否则编译不通过
例如:SQLException,IOException等
异常的处理机制
1、过程描述
Java虚拟机会在发生异常的那句代码的位置,创建一个异常的对象,并且抛出,这个时候,它会检测有没有try..catch,如果有对应的catch,那么程序正常运行,如果没有合适的catch,会被往上抛出,如果一路上都没有被catch,最终会导致程序终止运行。
2、两种方式
try...catch
//语法结构 try{ 可能发生异常的代码 }catch(异常的类型 e){ 捕获该异常后如何处理 }catch(异常的类型 e){ 捕获该异常后如何处理 }catch(异常的类型 e){ 捕获该异常后如何处理 } ... finally{ 不管是否发生异常都要执行的代码 } 下面的代码
执行特点
(1)如果try中没有异常,那么如果有finally,就执行finally,然后再执行[下面的代码]
(2)如果try中有异常,try剩下的代码就不执行了,直接去找对应的catch,如果有对应的catch,就执行,然后如果有finally,就执行finally,然后再执行[下面的代码]
(2)如果try中有异常,try剩下的代码就不执行了,直接去找对应的catch,如果没有对应的catch,然后如果有finally,就执行finally,[下面的代码]就不执行,抛出上级
语法特点
可能没有catch
可能没有finally
多个catch异常类型的顺序是"子上父下"
return和finally并存如何执行
如果finally中有return,那么一定是从finally中返回
如果finally中没有return,会先执行finally中的语句,然后return结束,但是返回的值是在执行finally之前就赋好值的
throws
//语法结构 [修饰符] 返回值类型 方法名(形参列表) 抛出的异常列表
注意
(1)throws后面可以是多个异常,不分顺序
(2)如果方法重写 重写方法抛出的异常<=被重写方法抛出的异常类型
自定义异常
1、自定义异常一定要继承Throwable或它的子类
原因是因为
(1)只有这个类型或它子类的对象才能被“抛出”
(2)只有这个类型或它子类的对象才能被“捕获”
2、一般来说声明两个或以上的构造器
(1)无参构造
(2)异常类型(String message)
3、都需要序列化
4、自定义异常的对象只能自己new并手动抛出,使用throw关键字
当然抛出后,就可以通过throws继续往上抛或使用try..catch处理
异常的关键字
try 尝试执行某些代码,看是否发生异常
catch 捕获异常
finally 不管是否发生异常都要执行的代码
throw 手动抛出异常(系统预定义异常 用户自定义异常)
throws 把异常抛出上级
异常
抛
1、JVMnew并且抛出
2、自己new并通过throw抛出
处理
1、throws继续抛给上级
2、当下处理try..catch
捕获
try...catch
标签:抛出,try,finally,catch,执行,异常 From: https://www.cnblogs.com/woniupa/p/17183642.html