You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 14:48:13