一,异常的分类
1、Throwable是java.lang包中一个专门用来处理异常的类。它有两个子类,即Error 和Exception,它们分别用来处理两组异常。
2、Throwable类是整个异常体系类的“父级类”,当然最终追根溯源到底的父类当然要归于Object类。
Throwable类实现了Serializable接口,表示Throwable可以进行序列化,继承自Object类,他的子类主要是Error和Exception类还有一个StackRecorder类。
3、Exception是Throwable的一个主要子类。Exception下面还有子类,其中一部分子类分别对应于Java程序运行期异常,另一部分是编译异常(报红)。
4、常见的运行期异常:
- NullPointerException - 空指针引用异常
- ClassCastException - 类型强制转换异常。
- IllegalArgumentException - 传递非法参数异常。
- ArithmeticException - 算术运算异常
- ArrayStoreException - 向数组中存放与声明类型不兼容对象异常
- IndexOutOfBoundsException - 下标越界异常
- NegativeArraySizeException - 创建一个大小为负数的数组错误异常
- NumberFormatException - 数字格式异常
- SecurityException - 安全异常
- UnsupportedOperationException - 不支持的操作异常
二,java对异常的处理方式
如果出现问题,java会根据问题所描述的异常类,创建一个对象(实例),然后将该对象即问题抛给上一级,具体步骤:
method具体出异常处 -> main主方法 -> jvm虚拟机 -> 将异常出现的位置和原因打印在控制台。
三,异常的处理方式
1.问题可以自己处理掉
try-catch
try{
//异常可能发生的代码
}catch(//要抓捕的异常){
//异常处理方式
}
PS:return
结论,try,catch,finally语句块的return的优先级由低到高,先执行try中return之前的语句,如果遇到异常,则执行catch语句中return之前的代码,最后执行finally语句块,finally语句块中如果有return,那么程序就会提前返回,如果没有,则返回catch语句块中的return,如果没有遇到异常,则直接执行finally中的语句块,再看finally语句块中是否有return来决定返回结果。
参考:https://www.cnblogs.com/mfrank/p/7895660.html
2.问题自己处理不了
throws
如果自己定义一个person类,成员变量是age,int类型,在set中规定年龄必须在0-150之间否则会throw new Exception(“您的年龄有误,请重新输入”),并在类上标记throws Exception,告知调用者;
当另外一个类Person p=new Person();p.setAge(-10)会报编译时期异常,需要继续向上抛。(PS;若throw new RunTimeException则不报红,见下图)
throw:是将异常对象抛给调用者
throws:只是一个对方法的声明,告知调用者此方法存在异常。
3.自定义异常:
就是要一个规范的异常类名,根据异常类名能够分析出问题所在的原因;、
找一个类,继承Exception,或者RuntimeException。
例子:
person类
调用者类
正常打印信息;(看不出问题原因)
自定义异常类
自定义异常打印异常: