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)

  • 相关阅读:
    实现Callable接口(了解即可)
    多线程模拟龟兔赛跑
    多线程操作同一个对象的例子(引出并发)
    实现Runnable和Thread类的区别(建议使用Runnable)
    Autel MaxiIM IM608:如何更新和一些评论
    VIDENT iSmart900自动多系统扫描工具OBDII支持ABS / SRS / EPB /传输诊断DPF再生/上油复位编码电池配置
    2019 Red PCB KESS V5.017:支持140协议
    V2018.5 MB SD C4功能和软件详细信息更新
    (已解决)FVDI 2018“连接到服务器.....失败”“打不开设备”
    燕化迷你ACDP程序FEM / BDC
  • 原文地址:https://www.cnblogs.com/aoguren/p/4661036.html
Copyright © 2011-2022 走看看