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

  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;

    }

}

 

 

  

你可能感兴趣的:(异常)