• JAVA异常处理原理浅析


    一,异常的分类

    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类

    调用者类

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

    自定义异常类

    自定义异常打印异常:

    当一个男人不再对你啰嗦,不再缠着你,不再没事找你,对你说话也客气了,也不再气你了。那么恭喜你,你已经成功的失去了他。别嫌弃男人幼稚,那是他喜欢你,爱你。女人说男人像小孩子一样不成熟,可又有谁知道,男人在自己喜欢的女人面前才像小孩子,如果不喜欢你了,不爱你了,他比你爸还成熟。
  • 相关阅读:
    poj 1837 Balance
    poj 3009 Curling 2.0
    vagrant up 无法加载映像目录
    liunx 查看php 安装的扩展
    树莓派 添加超级管理员身份
    Sublime text追踪函数插件:ctags[转载]
    手动安装m4, autoconf, automake, libtool
    nginx: [error] invalid PID number "" in "/usr/local/nginx/logs/nginx.pid"
    如何将编码转为自己想要的编码 -- gbk utf-8
    laravel 增删修改
  • 原文地址:https://www.cnblogs.com/fengtangjiang/p/11105007.html
Copyright © 2020-2023  润新知