zoukankan      html  css  js  c++  java
  • 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)

  • 相关阅读:
    Mina、Netty、Twisted一起学习(三):TCP前缀固定大小的消息(Header)
    集装箱set相关算法
    企业视觉-大型电商(制)-高性能的用户视觉性能(1)
    周期节
    在近排博客活动已被删除几篇文章
    [Python] Different ways to test multiple flags at once in Python
    [Angular] Use :host-context and the ::ng-deep selector to apply context-based styling
    [Javascirpt AST] Babel Plugin -- create new CallExpression
    [Python] Object spread operator in Python
    [Javascript AST] 3. Continue: Write ESLint rule
  • 原文地址:https://www.cnblogs.com/aoguren/p/4661036.html
Copyright © 2011-2022 走看看