在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
相关产品推荐
相关产品推荐

