1. Throwable成员方法
2. Throwable的成员方法
| 方法名 | 说明 |
|---|---|
| public String getMessage() | 返回throwable的详细消息字符串 |
| public String toString() | 返回此可抛出的简短描述 |
| public void printStackTrace() | 把异常错误信息输出到控制台 |
3. 🚀案例1: 演示getMessage()方法
try{
int[] arr = {1,2,3};
System.out.println(arr[3]);
}catch (ArrayIndexOutOfBoundsException e){
System.out.println(e.getMessage()); //Index 3 out of bounds for length 3
}
控制台输出:
开始
Index 3 out of bounds for length 3
结束
⚠️不同版本的
JDK输出的异常报错信息内容不同,如使用JDK1.8只会输出3,而使用较为高的版本,如JKD15则会输出较为完整的信息Index 3 out of bounds for length 3。
4. Throwable源码分析
// 异常类继承结构树形图
Throwable
| extends
Exception
| extends
RuntimeException
| extends
IndexOutOfBoundsException
| extends
ArrayIndexOutOfBoundsException
// ArrayIndexOutOfBoundsException.java
// Constructs a new ArrayIndexOutOfBoundsException class with an argument indicating the illegal index.
public ArrayIndexOutOfBoundsException(int index) {
super("Array index out of range: " + index);
}
在ArrayIndexOutOfBoundsException.java这个类中有一个构造方法,会去调用父类(IndexOutOfBoundsException)的构造方法,依次到Throwable(继承)。
// Throwable.java
private String detailMessage;
// ...
public Throwable(String message) {
fillInStackTrace();
detailMessage = message;
}
// ...
public String getMessage() {
return detailMessage;
}
// ...
分析: 实际上new ArrayIndexOutBoundsException()这个对象时,是传递了参数(越界的索引)的,然后在自己的构造方法中调用「直接父类构造器」并传参,最终调用到超类Throwable,并且在超类中赋值给超类自己的私有成员detailMessage。
所以getMessage()所输出的信息是来源于Throwable中的赋值。这个getMessage()也是超类Throwable中的方法(逐级继承)