一、三者之间的关系图:

二、演示

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

打印结果:

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

打印结果:

 

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

打印结果:

 

附注:

如何获取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)

Java中printStackTrace()、toString()、getMessage()的区别的更多相关文章

  1. Java中Comparable和Comparator接口区别分析

    Java中Comparable和Comparator接口区别分析 来源:码农网 | 时间:2015-03-16 10:25:20 | 阅读数:8902 [导读] 本文要来详细分析一下Java中Comp ...

  2. java中List 和 Set 的区别

    a. 特性 两个接口都是继承自Collection​,是常用来存放数据项的集合,主要区别如下:      ① List和Set之间很重要的一个区别是是否允许重复元素的存在,在List中允许插入重复的元 ...

  3. java中Runnable和Callable的区别

    文章目录 运行机制 返回值的不同 Exception处理 java中Runnable和Callable的区别 在java的多线程开发中Runnable一直以来都是多线程的核心,而Callable是ja ...

  4. java中wait和sleep的区别

    文章目录 Wait和sleep的区别 唤醒wait和sleep java中wait和sleep的区别 在本篇文章中,我们将会讨论一下java中wait()和sleep()方法的区别.并讨论一下怎么使用 ...

  5. Java中Set Map List 的区别

    java中set map list的区别: 都是集合接口 简要说明 set --其中的值不允许重复,无序的数据结构 list   --其中的值允许重复,因为其为有序的数据结构 map--成对的数据结构 ...

  6. 转:Java中abstract和interface的区别

    转自:Java中abstract和interface的区别 abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java ...

  7. Java中this与super的区别【6】

    若有不正之处,请多多谅解并欢迎批评指正,不甚感激.请尊重作者劳动成果: 本文原创作者:pipi-changing本文原创出处:http://www.cnblogs.com/pipi-changing/ ...

  8. Java中堆和栈的区别(转)

    栈与堆都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆.      Java的堆是一个运行时数据区,类的对象从中分配空间.这些对象通过new. ...

  9. Java中的toString()方法

    Java中的toString()方法 目录 Java中的toString()方法 1.    对象的toString方法 2.    基本类型的toString方法 3.    数组的toString ...

  10. 转:二十一、详细解析Java中抽象类和接口的区别

    转:二十一.详细解析Java中抽象类和接口的区别 http://blog.csdn.net/liujun13579/article/details/7737670 在Java语言中, abstract ...

随机推荐

  1. Codeforces13C–Sequence(区间DP)

    题目大意 给定一个含有N个数的序列,要求你对一些数减掉或者加上某个值,使得序列变为非递减的,问你加减的值的总和最少是多少? 题解 一个很显然的结果就是,变化后的每一个值肯定是等于原来序列的某个值,因为 ...

  2. 编译android版libmpg

    环境:ubutnu 12.04,android SDK 1. 下载libmpg的一个android工程,得到一个Android-libmpg-master.zip.https://github.com ...

  3. 在Visual Studio中使用Pseudovariables来帮助调试

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:在Visual Studio中使用Pseudovariables来帮助调试.

  4. JAVA基础入门

    Java入门基础 1.IDE->Eclipse 新建程序步骤 1.创建一个Java项目 2.创建一个包(package) 也就相当于C#中的命名空间C++中的头文件 3.创建一个类 这样就完成了 ...

  5. [Erlang]怎样加入自己的BIF

    步骤 1. 执行configure 2. 将你的bifs加入至erts/emulator/beam/bif.tab bif re:grep/2 bif re:compile/1 3. 创建一个C代码文 ...

  6. keepalived + haproxy 实现web 双主模型的高可用负载均衡--转

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://xz159065974.blog.51cto.com/8618592/140581 ...

  7. win7 设置自动关机

    1.C:\Windows\System32\shutdown.exe 2. -s:表示关机: -r:表示重启: -t:表示时间,以秒为单位: -a:表示取消shutdown计划,即表示取消关机或重启命 ...

  8. Python解释器运行成功,命令运行显示无此属性解决办法

    情况1: 查看出错的地方的Import包,看本程序是否有名字与import名称相同的py文件或者pyd文件. 有的话删除或者更名即可.

  9. onitemcommand 的作用以及onitemdatabound的具体作用

    Repeater控件.DataList控件的属性:OnItemCommand 当在ItemTemplate 中所宣告的Button 或LinkButton 控件触发事件时,如果该控件CommandNa ...

  10. 自定义标签 tld

    初学者可能在不借助IDE工具的情况下 编写自定义标签库 tld  程序可能遇到找不到class 的错误,下面讲解一下如何解决该问题 步骤一:新建一个自定义标签类 HelloWorldTag,该类放到s ...