在Java中创建自定义异常时为何要使用super()?
自定义异常相关问题解答
1. 用this调用printStackTrace()的理解是否有误?
这个理解完全正确。AlsCustomException继承自Exception,而Exception又继承自Throwable,printStackTrace()是Throwable的实例方法,会被子类继承。this指向当前子类实例,继承的方法属于该实例的一部分,所以直接用this.printStackTrace()(甚至可以省略this.)就能调用,没必要非得用super。
2. super()到底是什么?
要区分super和super()的不同:
super是子类实例里指向父类对象部分的引用,用来访问父类的成员(比如父类的方法、成员变量)。super()是子类构造方法里调用父类构造方法的专用语法,它不是引用,必须放在构造方法的第一行,作用是触发父类的构造逻辑,完成父类部分的初始化(比如第一个代码里的super(message),就是把异常消息传给父类的构造方法)。
3. 第二个代码片段能正常运行吗?
完全不能。
先看这段代码:
class AlsCustomException extends Exception { public AlsCustomException(String message) { this(message); } }
this(message)的作用是调用当前类的另一个带String参数的构造方法,但这个类里只定义了这一个构造方法,会直接导致构造方法无限递归调用,编译器会直接报错,根本过不了编译环节,更别说运行了。
内容的提问来源于stack exchange,提问作者Bawa
相关产品推荐
相关产品推荐

