zoukankan      html  css  js  c++  java
  • java异常总结

    异常:

    在程序运行过程中,出现的不正常情况叫做异常

    • 1、相同的代码在运行的时候,根据输入的参数或者操作的不同,有可能会发生异常,有可能不会发生异常
    • 2、 应该在写代码的过程中尽可能的保证代码的正确性,不要到处都bug
    • 3、如果要解决代码中出现的异常,需要添加非常复杂的代码逻辑来进行判断,会使代码变得非常臃肿,不利于维护,可读性比较差
    • 4、程序在运行过程中如果出现了问题,会导致后面的代码无法正常执行,而使用异常机制之后,可以对异常情况进行处理。同时后续的代码会继续执行,不会中断整个程序
    • 5、在异常的处理过程中,不要只是简单的输出错误,要尽可能的讲详细的异常信息进行输出
    • 6、e.printStackTrace():打印异常的堆栈信息,可以从异常信息的最后一行开始追踪,寻找自己编写的java类

     

    一、异常处理的方式:

    1.1、try...catch捕获异常

    try{
        代码逻辑
    }catch(Exception e){
        异常处理逻辑
    }
    try{
        代码逻辑
    }catch(具体的异常Exception e){
        异常处理逻辑
    }catch(具体的异常){
        
    }
    • 可以针对每一种具体的异常做相应的更丰富的处理

    注意:当使用多重的catch的时候一定要注意相关异常的顺序,将子类放在最前面的catch,父类放在后面的catch。执行过程中可能存在的情况:

    • 1、正常执行,只执行try中的代码
    • 2、遇到异常情况,会处理try中异常代码之前的逻辑,后面的逻辑不会执行,最后会执行catch中的代码
    • 3、使用多重catch的时候,会遇到异常子类不匹配的情况,此时依然会报错,因此建议在catch的最后将所有的异常的父类写上

     

    1.2、throw抛出自定义异常

    if(条件判断){
        throw new Exception("业务逻辑异常。。。");
    }

    1.3、throws声明异常

    public static void test() throws{
        "会发生异常代码";
    }
    
    public static void main(String[] args) throws {
        test();
        System.out.println("hehe");
    }

    以上代码输出语句不会被执行,因为test方法抛出了异常,main方法也没有进行捕获,继续抛给jvm。

     
    public static void test() throws{
        "会发生异常代码";
    }
    
    public static void main(String[] args) throws {
        try {
            test();
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("hehe");
    }

    以上代码输出语句会被输出,因为异常已经被处理。


     

    二、try...catch...finally执行顺序总结

    总结:try语句在返回前,将其他所有的操作执行完,保留好要返回的值,而后转入执行finally中的语句,而后分为以下三种情况:

    •  情况一:如果finally中有return语句,则会将try中的return语句”覆盖“掉,直接执行finally中的return语句,得到返回值,这样便无法得到try之前保留好的返回值。

    •  情况二:如果finally中没有return语句,也没有改变要返回值,则执行完finally中的语句后,会接着执行try中的return语句,返回之前保留的值。

    •  情况三:如果finally中没有return语句,但是改变了要返回的值,这里有点类似与引用传递和值传递的区别,分以下两种情况,:

    • 1)如果return的数据是基本数据类型或文本字符串,则在finally中对该基本数据的改变不起作用,try中的return语句依然会返回进入finally块之前保留的值。

    • 2)如果return的数据是引用数据类型,而在finally中对该引用数据类型的属性值的改变起作用,try中的return语句返回的就是在finally中改变后的该属性的值。

  • 相关阅读:
    Linux文件属性
    [Oracle] Listener的动态注册
    jQuery easyUI Pagination控件自定义div分页(不用datagrid)
    桂林电子科技大学出校流量控制器Android版1.0.0
    php使用check box
    Python windows ping
    Python selenium chrome 环境配置
    Linux wget auto login and backup database
    PyQt4 ShowHMDB show sqlite3 with QTableWidget summary
    PyQt4 py2exe 打包 HardwareManager
  • 原文地址:https://www.cnblogs.com/han-sun/p/13037695.html
Copyright © 2011-2022 走看看