• Java中printStackTrace()、toString()、getMessage()的区别


    一、三者之间的关系图:

    Untitled

    二、演示

    1、printStackTrace()演示:


    public class Test
    {
        public int div(int a, int b)
        {
            try
            {
                return a/b;
            } catch (Exception e)
            {
               e.printStackTrace();
            }
            return 0;
        }
        public static void main(String[] args)
        {
            Test test = new Test();
            test.div(3, 0);
        }
    }

    打印结果:

    Untitled

    e.printStackTrace()打印出异常,但是它还将显示出更深的调用信息。它是一层一层的向外调查,最后都会回到com.glxt…..main(主函数)。

    它适合调试时使用。

    2、toString()演示

    public class Test
    {
        public int div(int a, int b)
        {
            try
            {
                return a/b;
            } catch (Exception e)
            {
                System.out.println(e.toString());
            }
            return 0;
        }
        public static void main(String[] args)
        {
            Test test = new Test();
            test.div(3, 0);
        }
    }

    打印结果:

    Untitled

     

    3、getMessage()演示

    public class Test
    {
        public int div(int a, int b)
        {
            try
            {
                return a/b;
            } catch (Exception e)
            {
                System.out.println(e.getMessage());
            }
            return 0;
        }
        public static void main(String[] args)
        {
            Test test = new Test();
            test.div(3, 0);
        }
    }

    打印结果:

    Untitled

     

    附注:

    如何获取e.printStackTrace()的内容

    e.printStackTrace()通常是打印在控制台的,但是,有时候程序上线了需要看这个堆栈的内容就不容易了,一来生产环境打印的东西很多或者很少,二来有时候无法直接查看到,这个时候就需要把这些内容记录下来,比如记录到数据库中,下面的方法可以完整记录。

    public static void main(String[] args) {
            try {
                String aa = "";
                System.out.println(aa.substring(3));

            } catch (Exception e) {
                e.printStackTrace();
                StringWriter sw = new StringWriter();
                e.printStackTrace(new PrintWriter(sw, true));
                String str = sw.toString();
                System.out.println("==========");

                System.out.println(str);
            }
        }

    打印的效果如下:

    java.lang.StringIndexOutOfBoundsException: String index out of range: -3
        at java.lang.String.substring(Unknown Source)
        at java.lang.String.substring(Unknown Source)
        at Getc.main(Getc.java:16)
    ==========
    java.lang.StringIndexOutOfBoundsException: String index out of range: -3
        at java.lang.String.substring(Unknown Source)
        at java.lang.String.substring(Unknown Source)
        at Getc.main(Getc.java:16)

  • 相关阅读:
    centos下安装Anaconda
    centos下安装python2.7.9和pip以及数据科学常用的包
    mysql基础(5)-关联(mysql+pandas)
    mysql基础(4)-数据导入
    mysql基础(3)-高级查询
    mysql基础(2)-数据处理(mysql+pandas)
    mysql基础(1)-基本操作
    创建线程的三种方法
    Jar 包 及运行Jar包
    导出成可运行jar包时所遇问题的解决办法
  • 原文地址:https://www.cnblogs.com/aoguren/p/4661036.html
Copyright © 2020-2023  润新知