使用Super传递父类异常字符串,为什么子类对象的getMessage无法返回信息
时间: 2024-04-01 13:36:37 浏览: 27
在 Java 中,当一个异常被抛出时,它会被传递到调用堆栈中的第一个 catch 块中,如果该 catch 块没有处理该异常,则该异常会被传递到下一个 catch 块中,依此类推,直到异常被处理或者程序终止。
在 Super 语句中,如果子类继承了父类的异常,并且在子类中使用了 Super 语句调用父类的异常构造器时,父类的异常构造器会被调用,并且可以将异常信息传递到子类中。
当子类中调用 getMessage 方法时,它会首先查看自己是否有异常信息,如果有则返回自己的异常信息,否则会调用父类的 getMessage 方法获取异常信息。但是,如果父类的构造器中没有传递异常信息,那么子类中调用 getMessage 方法时就无法返回异常信息。
因此,如果想在子类中获取父类异常的信息,需要在父类的异常构造器中传递异常信息,否则子类中调用 getMessage 方法时就无法获取异常信息。
相关问题
创建ArrayIndexOutOfBoundsException的子类对象,使用super传递父类构造函数后,使用getMessage无法获取信息
如果你创建了ArrayIndexOutOfBoundsException的子类,并在子类中重写了getMessage()方法,但是在子类中调用getMessage()方法无法获取到异常信息,可能是因为你没有在子类中正确地调用父类的构造函数。
当你在子类中重写了getMessage()方法时,如果你希望能够获取到异常信息,需要在子类的构造函数中使用super语句调用父类的构造函数,以便将异常信息传递给父类。例如:
```
public class MyArrayIndexOutOfBoundsException extends ArrayIndexOutOfBoundsException {
public MyArrayIndexOutOfBoundsException(int index) {
super("Index: " + index + ", Size: " + size);
}
@Override
public String getMessage() {
return "MyArrayIndexOutOfBoundsException: " + super.getMessage();
}
}
```
在这个例子中,子类MyArrayIndexOutOfBoundsException重写了getMessage()方法,并在构造函数中使用了super语句调用父类的构造函数,将异常信息传递给了父类。当你在程序中使用MyArrayIndexOutOfBoundsException的对象并调用getMessage()方法时,就可以获取到正确的异常信息了。
不重写getMessage方法为什么不能得到异常信息
在Java中,如果你创建一个异常对象但没有重写getMessage()方法,调用getMessage()方法时默认会返回父类Throwable中的message字段值,即异常的详细信息。
但是,当你创建一个子类并重写getMessage()方法时,如果在子类中没有调用父类的构造函数,那么父类中的message字段值将会是null,因为子类构造函数没有传递任何参数给父类的构造函数。这时调用getMessage()方法将会返回null,而不是期望的异常信息。
因此,如果你在子类中重写了getMessage()方法,同时希望能够获取到正确的异常信息,你需要使用super语句在子类的构造函数中调用父类的构造函数,以便将异常信息传递给父类。这样,当你在程序中使用子类的对象并调用getMessage()方法时,就可以获取到正确的异常信息了。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)