比较message,cause,tostring,printstachTrace四个方法区别

比较getMessage,getCause,toString,printStackTrace四个方法区别

先说下结论:

e.getMessage():获取错误描述,该错误描述可以通过参数message设置

e.toString():获取异常类型+错误描述,例如java.lang.RuntimeException: myMessage

e.printStackTrace():将这个throwable及其回溯打印到标准错误流,第一行是异常类型+错误描述,第二行是抛出异常地方,最后一行是第一个调用方法,第二行到最后一行是传播的方法栈,如果有cause,则cause拼接在最后一行下面,以此类推。

e.getCause:返回此throwable的原因,或者null原因不存在或未知

代码验证
情况1:没有异常转义
public static void f1(){
        throw new RuntimeException("myMessage");
    }
    public static void f2(){
            f1();
    }
    public static void main(String[] args) {

        try{
            f2();
        }catch (Exception e){
            System.out.println("e.getMessage:");
            System.out.println(e.getMessage());
            System.out.println("toString:");
            System.out.println(e.toString());
            System.out.println("printStackTrace:");
            e.printStackTrace();
            System.out.println("cause:");
            System.out.println(e.getCause());
        }
    }

输出:

1:e.getMessage:
myMessage
2:toString:
java.lang.RuntimeException: myMessage
3:printStackTrace:
java.lang.RuntimeException: myMessage
	at com.suyan.sca.MopFacadeTest.f1(MopFacadeTest.java:46)
	at com.suyan.sca.MopFacadeTest.f2(MopFacadeTest.java:49)
	at com.suyan.sca.MopFacadeTest.main(MopFacadeTest.java:54)
4:cause:
null
情况2:有异常转义
static class MyException extends RuntimeException{
         MyException(String message){super(message);}
    }

    public static void f1(){
        throw new RuntimeException("myMessage");
    }
    public static void f2(){
        try{
            f1();
        }catch (RuntimeException e) {
            throw new MyException("我的异常");
        }
    }
    public static void main(String[] args) {

        try{
            f2();
        }catch (Exception e){
            System.out.println("e.getMessage:");
            System.out.println(e.getMessage());
            System.out.println("toString:");
            System.out.println(e.toString());
            System.out.println("printStackTrace:");
            e.printStackTrace();
            System.out.println("cause:");
            System.out.println(e.getCause());
        }
    }

结果

1:e.getMessage:
我的异常
2:toString:
com.suyan.sca.MopFacadeTest$MyException: 我的异常
3:printStackTrace:
com.suyan.sca.MopFacadeTest$MyException: 我的异常
	at com.suyan.sca.MopFacadeTest.f2(MopFacadeTest.java:56)
	at com.suyan.sca.MopFacadeTest.main(MopFacadeTest.java:62)
4:cause:
null
情况3:配置cause
static class MyException extends RuntimeException{
        MyException(String message){super(message);}
        MyException(String message,Throwable e){super(message,e);}
    }

    public static void f1(){
        throw new RuntimeException("myMessage");
    }
    public static void f2(){
        try{
            f1();
        }catch (RuntimeException e) {
            throw new MyException("我的异常",e);
        }
    }
    public static void main(String[] args) {

        try{
            f2();
        }catch (Exception e){
            System.out.println("1:e.getMessage:");
            System.out.println(e.getMessage());
            System.out.println("2:toString:");
            System.out.println(e.toString());
            System.out.println("3:printStackTrace:");
            e.printStackTrace();
            System.out.println("4:cause:");
            Throwable cause = e.getCause();
            System.out.println("4.1:getMessage:");
            System.out.println(cause.getMessage());
            System.out.println("4.2:toString:");
            System.out.println(cause.toString());
            System.out.println("4.3:printStackTrace:");
            cause.printStackTrace();
        }
    }

结果

1:e.getMessage:
我的异常
2:toString:
com.suyan.sca.MopFacadeTest$MyException: 我的异常
3:printStackTrace:
com.suyan.sca.MopFacadeTest$MyException: 我的异常
	at com.suyan.sca.MopFacadeTest.f2(MopFacadeTest.java:57)
	at com.suyan.sca.MopFacadeTest.main(MopFacadeTest.java:63)
Caused by: java.lang.RuntimeException: myMessage
	at com.suyan.sca.MopFacadeTest.f1(MopFacadeTest.java:51)
	at com.suyan.sca.MopFacadeTest.f2(MopFacadeTest.java:55)
	... 1 more
4:cause:
4.1:getMessage:
myMessage
4.2:toString:
java.lang.RuntimeException: myMessage
4.3:printStackTrace:
java.lang.RuntimeException: myMessage
	at com.suyan.sca.MopFacadeTest.f1(MopFacadeTest.java:51)
	at com.suyan.sca.MopFacadeTest.f2(MopFacadeTest.java:55)
	at com.suyan.sca.MopFacadeTest.main(MopFacadeTest.java:63)
附录:

https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值