一、概述:
就是程序在运行时出现的不正常情况。
二、异常体系:
- Throwable顶层
a:Error描述(严重问题),通常出现了重大问题,比如内存溢出,或者类不存在,这些都是不需要处理的,需要修改代码;
b: Exception(不严重),编译时期异常( Exception ):我们一般处理的都是它(重点);
c:RuntimeException 运行时期异常,这个不需要处理,需要修改代码;
注:异常体系的特点,异常体系中的所有类以及建立的对象都具有可抛性,也就是说可以被throw和throws关键字所修饰,只有异常体系具备这个特点。 - throw和throws的用法
throw:定义在函数内,用于抛出异常,其后面跟的是对象;
throws:定义在函数上,用于抛出异常类,其后面跟异常类,可以抛出多个异常用逗号隔开。
当函数内容有throw抛出的异常对象,并未进行try处理,必须要在函数上声明,否则会编译失败,注RuntimeException除外。
如果函数声明了异常,调用者需要进行处理,处理方法可以throws可以try。 - Exception异常分类
a:编译时期的异常:该异常在编译时出现,如果不处理就会出现编译失败。
b:运行时异常:编译时不会被检测出异常,编译时不需要处理,该异常发生时,建议不处理,让程序停止,需要对代码进行处理。 - 异常处理语句
try
{
需要被检测的代码(有可能出现问题的代码)
}
catch(异常类名 变量名)
{
处理异常代码(处理方式,可以采用e.printStackTrace( )方法)
}
finally{
一定会执行的代码;(多存放的是释放内存的代码)
}
注:
1、finally通常定义为关闭资源代码,因为资源必须释放
2、finally只有一种情况不会被执行到,当遇到system.exit( 0 )时,fanlly不会被执行;
- 多异常处理方式
a: 一般情况,在函数内出现异常,要在函数上声明;
b: 在异常处理中,一但try块中,第一个代码出现问题,程序的执行会直接跳到catch中,try块中的其他代码就不会执行了
c: 针对多个异常,写一个try的代码,catch里异常执行顺序,如果说异常是平级关系,那么没有顺序问题;如果异常存在着子父类关系,那么子类要在父类之前 - 自定义异常
a: 定义类继承Exception或者RuntimeException,是为了让该自定义的类具备可抛性和操作异常的共性方法;
b: 当要定义自定义的异常信息时,可以使用父类已经定义好的功能;
c: 自定义异常按照java的面向对象的思想,将程序中出现的特有问题封装。 - 异常的处理原则
a: 异常的处理方式有两种try和throw;
b:调用到抛出异常时,抛出几个就处理几个,一个try可以对应多个catch;
c:多个catch共存,将父类的catch放到最下面;
d:catch内要定义针对的处理方式,不要简单的定义为printstacktrace输出语句,也不要不写; - 注意事项
a:在子类覆盖父类时,子类抛出的异常必须是父类的异常或改异常的子类;
b:如果父类或接口没有出现异常,子类覆盖出现异常,只能try不能抛。
网友评论