Throwable中的toString()、getMessage()和printStackTrace()你真的搞懂了吗?

前言:

        博主早上在地铁上无意点开了个帖子。上面说:

  • String getMessage(): 返回异常发生时的详细信息
  • String toString(): 返回异常发生时的简要描述
  • void printStackTrace(): 在控制台上打印 Throwable 对象封装的异常信息

那我当时就好奇了,好像我们用都是用的 printStackTrace() 。前面的两种方法打印的格式是什么样子的呢?于是博主利用午休时间在公司一顿乱造,最后总结写出了这篇文章。


Throwable类里声明了toString()、getMessage()和printStackTrace()这3个方法。


Exception类是从Throwable类继承的,能直接调用这几个方法。

官方API文档里对这三个方法的定义:

1. public String toString()
   Returns a short description of this throwable.
2. public String getMessage()
   Returns the detail message string of this throwable.
3. public void printStackTrace()
   Prints this throwable and its backtrace to the specified print stream.

对上述定义的个人理解:

1.调用toString()方法:返回该异常类名和字符串信息
  (或者直接输出该异常对象结果也是一样,因为实质也是调用toString()方法)
2.调用getMessage()方法:返回字符串信息
3.调用printStackTrace()方法:打印该异常类名、字符串信息和方法调用到异常抛出的轨迹
注:toString()和getMessage()和这2个方法的返回类型是String,是返回信息;而printStackTrace()的返回类型是void,是直接打印出信息

public class ThrowableTest{
	public static void main(String[] args){
		try{
			throw new Exception("This is a Bug");
		}catch(Exception e){
			System.out.println("0: "+e);
			System.out.println("1: "+e.toString());
			System.out.println("2: "+e.getMessage());
			System.out.print("3: ");
			e.printStackTrace();
		}
	}
}

输出:

0: java.lang.Exception: This is a Bug
1: java.lang.Exception: This is a Bug
2: This is a Bug
3: java.lang.Exception: This is a Bug

 如果是自己定义的异常类(继承了Exception),字符串信息要传给其父类Exception的构造器,上述3个方法才能返回该字符串。(除非在自己定义的类中覆盖这几个方法)。
如下程序中的MyException类的字符串信息只传给自己的构造器的,调用方法时无法返回该字符串
而MyException_1类的字符串信息由super()方法传给了Exception的构造器,调用方法时能返回该字符串

class MyException extends Exception{
	String s;
	MyException(String s1){this.s=s1;}
}
 
class MyException_1 extends Exception{
	MyException_1(String s1){super(s1);}
}
 
public class Test1{
	public static void main(String[] args){
		try{
			throw new MyException("This is a Bug");
		}catch(MyException e){
			System.out.println("1: "+e.toString());
			System.out.println("2: "+e.getMessage());
			System.out.print("3: ");
			e.printStackTrace();
		}
		try{
			throw new MyException_1("This is a Bug");
		}catch(MyException_1 e){
			System.out.println("4: "+e.toString());
			System.out.println("5: "+e.getMessage());
			System.out.print("6: ");
			e.printStackTrace();
		}
	}
}

输出:

1: MyException
2: null
3: MyException
        at ThrowableTest.main(Test1.java:13)
 
4: MyException_1: This is a Bug
5: This is a Bug
6: MyException_1: This is a Bug
        at ThrowableTest.main(Test1.java:21)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值