JAVA异常处理原理浅析

2022-09-17 08:35:21

一,异常的分类

1、Throwable是java.lang包中一个专门用来处理异常的类。它有两个子类,即Error 和Exception,它们分别用来处理两组异常。

2、Throwable类是整个异常体系类的“父级类”,当然最终追根溯源到底的父类当然要归于Object类。

Throwable类实现了Serializable接口,表示Throwable可以进行序列化,继承自Object类,他的子类主要是Error和Exception类还有一个StackRecorder类

3、Exception是Throwable的一个主要子类。Exception下面还有子类,其中一部分子类分别对应于Java程序运行期异常,另一部分是编译异常(报红)。

4、常见的运行期异常:

  1. NullPointerException - 空指针引用异常
  2. ClassCastException - 类型强制转换异常。
  3. IllegalArgumentException - 传递非法参数异常。
  4. ArithmeticException - 算术运算异常
  5. ArrayStoreException - 向数组中存放与声明类型不兼容对象异常
  6. IndexOutOfBoundsException - 下标越界异常
  7. NegativeArraySizeException - 创建一个大小为负数的数组错误异常
  8. NumberFormatException - 数字格式异常
  9. SecurityException - 安全异常
  10. 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类

调用者类

正常打印信息;(看不出问题原因)

自定义异常类

自定义异常打印异常:

转载于:https://www.cnblogs.com/fengtangjiang/p/11105007.html

  • 作者:aikui8441
  • 原文链接:https://blog.csdn.net/aikui8441/article/details/101133429
    更新时间:2022-09-17 08:35:21