• 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)

  • 相关阅读:
    vs code快捷键
    封装一个运动函数
    关于数组操作方式的总结
    学习html/css基础的重点笔记
    web新手——新闻列表这样写不容易出错
    AppCan——生成Web/微信App版,调用微信JSAPI支付方式,提示WeixinJSBridge内置对象undefined
    vue slot 占位符
    vue /deep/ css 不用1级1级找了
    vue 双向绑定 2个{{}}
    axios 请求接口 f12可以返回值 但是控制台打印报错
  • 原文地址:https://www.cnblogs.com/aoguren/p/4661036.html
Copyright © 2020-2023  润新知