gpt4 book ai didi

java - 调用类方法时出现 java.lang.NullPointerException 错误

转载 作者:行者123 更新时间:2023-11-30 03:14:46 24 4
gpt4 key购买 nike

我正在尝试制作一个程序,获取员工的姓名、开始日期、工资。所以我做了几个类,包括我的调用类:

TestWorker.java

public class TestWorker {
public static void main(String[] args) {
Worker w1, w2, w3;
w1 = new Worker ("Robert William Hunter", "23/10/2005", 35000.00);
w2 = new Worker ("John Smith", "15/11/2005", 25000.00);
w3 = new Worker ("Mary Jane Hull", "06/09/2007");
w2. setSalary(20000.00);
w2.setSupervisor(w1);
w3.setSupervisor(w1);
System.out.println("Number of workers = " + Worker.getHowManyWorkers() +" \n");
System.out.println("Supervisor of John is " + w2.getSupervisorName());
System.out.println(w1.toString()+" \n");
System.out.println(w2.toString()+" \n");
System.out.println(w3.toString()+" \n");
}
}

worker.java

public class Worker {
private Name workerName;
private MyDate dateJoiningCompany;
private Worker Supervisor;
public Worker(String name, String date, double salary) {
workerName = new Name(name);
dateJoiningCompany = new MyDate(date);
Salary = (float)salary;
}
public Worker(String name, String date) {
workerName = new Name(name);
dateJoiningCompany = new MyDate(date);
}

public void setSupervisor(Worker supervisor) {
if(supervisor != null) {
Supervisor.workerName = supervisor.workerName; //ERROR HERE
Supervisor.dateJoiningCompany = supervisor.dateJoiningCompany;
}
else {
System.out.println("The person you are trying to assign a Supervisor to has no supervisor");
}
}
public String toString() {
if(Supervisor != null) {
return (workerNumber + " " + workerName.toString() + " " + dateJoiningCompany.toString() + " " + Supervisor.workerName.toString() + " " + Salary);
}
else {
return (workerNumber + " " + workerName.toString() + " " + dateJoiningCompany.toString() + " " + Salary);
}
}
}

名称.java

import java.util.StringTokenizer;

public class Name {
private String firstName;
private String middleName;
private String lastName;
public Name(String name) {
StringTokenizer tokens;
tokens = new StringTokenizer(name," ");
int numTokens = tokens.countTokens();
if(numTokens == 2) {
firstName = tokens.nextToken();
middleName = null;
lastName = tokens.nextToken();
}
else if(numTokens == 3) {
firstName = tokens.nextToken();
middleName = tokens.nextToken();
lastName = tokens.nextToken();
}
else {
System.out.println("That was not a valid input");
return;
}
}
public Name(Name name) {
if(name != null) {
firstName = name.firstName;
middleName = name.middleName;
lastName = name.lastName;
}
}

当我运行它时,我在Supervisor.workerName =supervisor.workerName;行上收到错误。我通过阅读答案 https://stackoverflow.com/a/10464598/5339899 理解了错误但我无法理解为什么 supervisor.workerName 为空。

我删除了类中的一些我认为与问题无关的代码,因此如果它似乎缺少一些重要的内容,请发表评论,我将使用所需的代码进行更新

最佳答案

您从未在类中初始化您的 Supervisor 变量,因此您会遇到空指针异常。

还有一件事 - 常见的约定是类名以大写字母开头,变量以小写字母开头,因此 Supervisor 作为变量的名称不太好。也不建议有两个同名的变量,一个大写,一个小写,这会使像这样的行非常困惑:Supervisor.workerName = Supervisor.workerName;

关于java - 调用类方法时出现 java.lang.NullPointerException 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32916170/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com