异常体系
Throwable 异常体系的顶层父类
Error 正常的程序,不应该捕获处理,严重问题
Exception 异常(例外),正常程序,应该试图捕获处理的,轻微问题
RuntimeException 运行时异常
简述异常的处理方式?
1.Jvm默认处理异常的机制
2.手动处理异常
2.1对异常进行声明
2.2对异常进行捕获解决
throw和throws关键字的使用位置和格式?
使用位置:
throw:当程序运行到了程序员认为不正确的情况,不需要程序运行下去,就在这个条件抛出一个异常对象
throws:在某个方法中,有一些编译时异常,没有给出处理方案,没有捕获这个异常,也没有处理这个异常,就说明这是一个有问题的方法,那么就必须在方法的声明上,声明这个异常
格式:
throw:
throw new xxxException();
throws:
修饰符 返回值类型 方法名称(参数列表) throws 异常类型1,异常类型2,...{
可能出现异常的代码
}
比较:
1.throw是对异常对象的抛出,throws是对异常类型的说明
2.throw是对异常对象的抛出,一旦使用关键字,就一定会有一个异常对象出现;
throws是对可能出现的异常类型的声明,即使声明了异常类型,也可以不出现任何异常
3.throw后面只能跟一个异常对象,throws可以跟很多个异常类型
Throwable类中定义了三个异常处理的方法
1、构造方法:用于将异常情况封装成对象
Throwable()
创建一个没有描述的异常对象
Throwable(String message)
创建一个带有消息描述的异常对象
Throwable(Throwable cause)
创建一个带有原因异常对象的异常对象
2、成员方法:所有的异常都可以调用以下方法
getMessage()
获取异常对象中的详细消息字符串
toString()
获取异常对象中的简短描述
getCause()
获取异常对象中的原因异常对象
printStackTrace()
打印当前异常对象的调用栈轨迹
栈轨迹:调用的轨迹,可以很清晰的表示出异常出现和抛出的路径,有了这个信息, 可以查找出具体出现问题的地方
String getMessage() 返回值此 throwable 的简短描述
String toString() 返回此 throwable 的详细消息字符串
void printStackTrace() JVM打印异常对象,默认此方法,打印的异常信息最全面
System.out.println(e.getMessage());
System.out.println(e.toString());
e.printStackTrace();
注意:
1.运行时异常被抛出可以不处理。即不捕获也不声明拋出
2.如果finally有return语句,永远返回finally中的结果,应该避免这种情况
3.如果父类抛出了多个异常,子类重写父类方法时抛出和父类相同的异常或者是父类异常的子类或者不抛出异常
4.父类方法没有抛出异常,子类重写父类该方法时也不可拋出异常。此时子类产生该异常,只能捕获处理,不能
5.在 try/catch后可以自加finally代码块,其中的代码一是会被执行,通常用于资源回收
自定义异常
格式:public class XXXException extends Exception/RuntimeException{
添加一个空参数的构造方法
添加一个带异常信息的构造方法(查看源码发现,所有的异常类都会有一个异常类的构造方法,方法内部会调用父类带异常的构造方法,让父类处理这个信息)
}
1.自定义异常类一般都是以Exception结尾,说明该类是一个异常类.
2.自定义异常类,必须的继承Exception或者RuntimeException
继承Exception:那么自定义的异常类就是一个编译期异常,如果方法内部抛出了编译期异常,就必须处理这个异常,要么throws,要么try...catch
继承RuntimeException:那么自定义的异常类就是一个运行期异常,无需处理交给虚拟机处理(中断处理)