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

Java中出现NullPointerException异常求助:Square继承Shape实例化报错

解决Shape/Square实例化时的NullPointerException问题

看起来你在实例化Square对象时遇到了空指针异常,从报错栈来看,问题出在Shape父类的构造函数第19行,而这个构造函数是被Square的构造函数第18行调用的。我来帮你拆解一下可能的原因和修复方法:

核心原因分析

NullPointerException 本质上是你在代码中尝试调用一个null对象的方法或访问它的属性。结合你的报错栈,大概率是以下两种情况之一:

  • Square构造函数在调用父类super()方法时,传递了某个null参数给Shape的构造函数;
  • Shape构造函数的第19行代码,在处理某个成员变量时,该变量还未被初始化(或者被赋值为null)就被使用了。

具体排查方向

  • 检查Square构造函数的super调用:
    你在main方法里已经正确创建了Point p1 = new Point(3,3),但如果Square的构造函数第18行没有把这个p1正确传递给父类的构造函数,比如写成了super(null, 3)而不是super(p1, 3),那Shape构造函数拿到的Point就是null,后续调用它的方法(比如getX()、getY())就会触发空指针。

    举个错误写法的例子:

    public Square(Point p, int side) {
        super(null); // 这里错误地传递了null
        this.side = side;
    }
    
  • 检查Shape构造函数第19行的代码:
    找到Shape类第19行的代码,看看是不是在操作某个可能为null的变量。比如如果Shape的构造函数里有这样的代码:

    public Shape(Point center) {
        // 第19行:直接调用center的方法,但center可能为null
        this.centerX = center.getX();
        this.centerY = center.getY();
    }
    

    那如果Square传递过来的center是null,这行就会报错。

修复建议

  1. 确保Square正确传递参数给父类:
    修改Square的构造函数,把收到的Point参数完整传递给Shape的构造函数,比如:

    public Square(Point p, int side) {
        super(p); // 这里传递用户传入的非null Point
        this.side = side;
        // 其他Square的初始化逻辑
    }
    
  2. 在Shape构造函数中添加null校验(可选但推荐):
    为了避免后续再出现类似问题,可以在Shape的构造函数里先检查参数是否为null,提前抛出明确的异常:

    public Shape(Point center) {
        if (center == null) {
            throw new IllegalArgumentException("Center point cannot be null");
        }
        // 第19行的原有逻辑,比如赋值或调用方法
        this.center = center;
        this.centerX = center.getX();
    }
    

如果能提供Shape和Square构造函数的完整代码,我可以帮你更精准地定位问题,但按照目前的报错信息,上面的排查方向应该能解决你的问题。

内容的提问来源于stack exchange,提问作者Pape Sow Traore

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:38:23