Java中如何在Cd类通过带参方法初始化Publisher类成员?
解决Java NullPointerException异常问题
问题根源
- 空指针触发原因:Cd类中仅声明了
Publisher publisher成员变量,但未创建实例对象(未执行new Publisher()),直接调用publisher.setName()和publisher.setPhoneNumber()时,publisher为null,导致空指针异常。 - 额外问题:Publisher类仅定义了私有成员变量,但未提供对外的setter方法,即便实例化了publisher,也无法设置其name和phoneNumber属性。
修复代码
修复后的Publisher类(添加setter方法)
public class Publisher { private String name; private String phoneNumber; // 为私有成员添加setter方法 public void setName(String name) { this.name = name; } public void setPhoneNumber(String phoneNumber) { this.phoneNumber = phoneNumber; } }
修复后的Cd类(实例化publisher对象)
有两种常见修复方式:
方式1:在setPublisher方法内实例化
public class Cd { private String titel; private String artist; private int length; Publisher publisher; public void setPublisher(String name, String phoneNumber) { // 先创建Publisher实例,再调用setter方法 this.publisher = new Publisher(); publisher.setName(name); publisher.setPhoneNumber(phoneNumber); } }
方式2:在Cd构造器/成员声明时提前实例化
如果希望publisher对象在Cd创建时就存在,可提前初始化:
public class Cd { private String titel; private String artist; private int length; // 声明时直接实例化 Publisher publisher = new Publisher(); public void setPublisher(String name, String phoneNumber) { publisher.setName(name); publisher.setPhoneNumber(phoneNumber); } }
补充说明
如果需要限制publisher只能被初始化一次,可结合构造器和私有访问控制,避免重复创建实例。
内容的提问来源于stack exchange,提问作者brah79
相关产品推荐
相关产品推荐

