版权声明:如需转载请标明出处 https://blog.csdn.net/yj201711/article/details/84836001
当异常发生时,获取异常信息
1、e.printStackTrace();打印异常的堆栈信息
java.lang.ArithmeticException: / by zero(by zero就是它的字符串信息)
at org.lanqiao.exception.demo.FinallyDemo.main(FinallyDemo.java:10)
2、e.getMessage();返回异常的信息字符串 / by zero
异常的分类
- 编译期异常都是Exception的直接子类
- 运行时异常都是RuntimeException的子类
主动抛出异常
在方法内部,throw new 异常();
- new Exception ("异常信息的描述")就称为主动抛出一个编译期异常
- new RuntimeException("异常信息的描述") 就称为主动抛出一个运行时异常
Throws 和Throw的区别:(面试题)
- 从声明的位置:Throws 声明抛出一个异常 在方法上;Throw 声明抛出一个异常 在方法内
- 抛的目标:Throws 抛出的是异常的类型;Throw 抛出的是异常的对象
- 抛出的异常数量:Throws 可以抛出多种类型的异常,不同的异常类型间,使用逗号分割;Throw 以此只能抛出一个异常对象
- 异常的发生:Throws 表示方法有可能存在一下异常,但实际并不一定回发生; Throw 表示抛出一个异常对象,所以在执行该方法的时候,就一定会抛出异常
异常的处理策略
对于编译期异常必须进行处理,如果不处理,程序会报错,无法执行。
如何处理:
如果自己很清楚该异常的处理,则自己处理,就不需要将异常暴露出来
如果你自己不清楚该异常如何处理,并且你需要让方法的调用者清楚当前方法存在异常。那么就不需要自己处理,直接将异常抛出给方法的调用者,有方法的调用者来决定处理的方式。
自定义异常
举例:输入学生年龄的时候,0--100 如果不在该范围之内,则表示输入的年龄是一种异常。
自定义编译期异常:
public class MyException extends Exception{
public MyException() {
super();
}
public MyException(String message) {
super(message);
}
}
自定义运行时异常 :
public class MyRuntimeException extends RuntimeException{
public MyRuntimeException() {
super();
}
public MyRuntimeException(String message) {
super(message);
}
}