出现了异常,如何快速定位到错误代码

  java异常处理机制,一般形式为Try{} catch {} finally{},其中只有当Try代码块中出现了异常,才会跳转到catch代码块,而finally是无论如何都会执行的。

第一种情况:

  Try

  {

  }

  catch(IOExcetion e)

  {

  }

  finally

  {

  }

  1.如果try代码块不出现异常,那么catch中的语句不会执行,当执行完finally代码块后,程序正常结束。

  2.出现try代码块异常,如果异常恰好是IOException或者是IOException的子类,那么会执行catch代码块,然后执行finally代码块,程序正常结束;

             如果为其他异常而且不是IOException的子类,那么同样不会执行catch代码块,当执行完finally代码块,程序异常结束,并向外面抛出                                                未被捕捉到的异常。

第二种情况

  程序运行时,日志打印中出现异常提示,是很正常的事情。例如在进行数据库查询时,如果发生异常,而你又希望程序继续执行,你要做的只要捕获这个异常即可。同时通常大家会将这个异常打印出来,虽然此时由于异常已经被处理,程序实际上在正常运行。

第三种情况

  程序出错,但是并没有抛出相应异常。这种情况一般出现在出现运行时异常,例如空指针异常,虽然有异常捕捉语句,但是大多数都是针对不得不进行的非运行时异常捕获,所以很容易丢失异常出现的位置。比如在一个方法中出现了这种异常,在调用它的方法中才有可能报异常,这就导致了异常定位的困难。

so

  程序出错,一般会报异常,所以第一件要做的事情就是定位异常出现的位置。

  1. 默认在调试时,会在后台打印出异常信息,以及出现异常的位置。大多数情况下可以帮助你定位到异常位置。

  2.如果定位到异常位置,发现该异常已经被捕获并处理,那么这就不是导致程序出错的异常位置。需要根据其他信息逐步定位到异常位置。

  3.程序出错,但是没有相关的异常信息提示,这时需要分析catch语句,逐步调试到异常代码段。

    例如,方法1和方法2都会抛出异常,但是确不会有异常信息提示。

public class Test
{
    public static void main(String[] args)
    {
        try
        {
            method1();
            method2();
        }
        catch (Exception e)
        {
            System.err.println("Exception!");
        }
    }
    
    private static void method1()
    {
        String str = null;
        System.out.println(str.length());
    }
    private static void method2()
    {
        int i= 1/0;
    }
}

  

原文地址:https://www.cnblogs.com/CanWork/p/3386997.html