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与Mac通信
    练习
    删除重复文件
    解压压缩文件
    查询压缩文件的大小
    修改文件夹和文件名字
    删除文件和文件夹
    移动文件和文件夹
    shutil复制文件夹
    shutil复制文件
  • 原文地址:https://www.cnblogs.com/han-sun/p/13037695.html
Copyright © 2011-2022 走看看