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

在Employee构造器中调用Date类Setter方法设置属性报错求助

问题分析与解决

你遇到的是NullPointerException(空指针异常),核心原因很简单:你的Employee类里的hire_date变量只是一个引用,还没有指向任何实际的Date对象实例,就直接调用它的setDay、setMonth等方法了。

在Java中,引用类型的变量默认值是null——也就是说,hire_date此时只是一个空的"占位符",并没有关联到内存中真正的Date对象。当你尝试通过这个空引用调用方法时,JVM无法找到对应的对象,自然会抛出空指针异常。

修复方案

只需要在调用set方法之前,先实例化一个Date对象,把它赋值给hire_date即可。因为你的Date类没有显式定义构造器,Java会自动为它提供一个默认的无参构造器,所以直接用new Date()就能创建实例。

修改后的完整代码

Date类(保持不变)

class Date {
    private int day;   
    private int month;
    private int year;

    public void setDay(int day) {
        this.day = day;
    }

    public void setMonth(int month) {
        this.month = month;
    }

    public void setYear(int year) {
        this.year = year;
    }
}

修复后的Employee类

class Employee {
    private String name;
    private Date hire_date;
    private double monthly_salary; 

    public Employee() {
        name = "Jody";
        // 关键:先创建Date对象实例
        hire_date = new Date();
        hire_date.setDay(1);
        hire_date.setMonth(1); 
        hire_date.setYear(2018);         
        monthly_salary = 2000.0;
    }
}

额外优化建议

如果你想让代码更简洁,可以给Date类添加一个带参数的构造器,这样就能在初始化hire_date的时候直接完成赋值:

class Date {
    private int day;   
    private int month;
    private int year;

    // 添加带参构造器
    public Date(int day, int month, int year) {
        this.day = day;
        this.month = month;
        this.year = year;
    }

    // 保留原有的set方法(可选,根据需求决定)
    public void setDay(int day) {
        this.day = day;
    }

    public void setMonth(int month) {
        this.month = month;
    }

    public void setYear(int year) {
        this.year = year;
    }
}

对应的Employee构造器可以简化为:

public Employee() {
    name = "Jody";
    // 直接通过带参构造器创建并赋值
    hire_date = new Date(1, 1, 2018);         
    monthly_salary = 2000.0;
}

这样既避免了空指针问题,也让代码更紧凑易读。

内容的提问来源于stack exchange,提问作者Learning Equals Success

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:14:04