zoukankan      html  css  js  c++  java
  • 出现了异常,如何快速定位到错误代码

      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;
        }
    }

      

  • 相关阅读:
    ps入门
    ls命名 | Linux统计文件夹内的文件个数
    python打包成可执行文件
    装饰器
    poj 2752 Seek the Name, Seek the Fame
    字符串最大值
    次小生成树
    Selecting Courses
    poj 3461 Oulipo
    poj 2406 Power Strings
  • 原文地址:https://www.cnblogs.com/CanWork/p/3386997.html
Copyright © 2011-2022 走看看