无法利用对象-java.lang.NullPointerException错误
我试图利用一个类,它使用另外三个类作为数据字段。不幸的是,试图获取嵌套对象的值似乎不起作用 这是用于测试类的主程序:无法利用对象-java.lang.NullPointerException错误,java,Java,我试图利用一个类,它使用另外三个类作为数据字段。不幸的是,试图获取嵌套对象的值似乎不起作用 这是用于测试类的主程序: public class EmployeeTest { public static void main( String [] args ) { String name1 = "John"; String name2 = "Smith"; String street = "12 Street"; String state = "MA";
public class EmployeeTest
{
public static void main( String [] args )
{
String name1 = "John";
String name2 = "Smith";
String street = "12 Street";
String state = "MA";
String city = "Boston";
String zip = "50312";
int day = 12;
int month = 12;
int year = 2001;
Employee employee1 = new Employee( name1, name2, street, city, state, zip, month, day, year );
System.out.println("Employee's name is " + employee1.GetName1());
}
}
这是所创建对象的类:
public class Employee
{
private Name name;
private Address address;
private Date date;
// define data fields
public Employee( String name1, String name2, String street, String city, String state, String zip , int month, int day, int year)
{
Name name = new Name( name1 , name2 );
Address address = new Address( street, city, state, zip);
Date date = new Date();
date.setDate( month , day, year );
}
// constructor
public String GetName1()
{
String name1 = name.GetFirstName();
return name1;
}
// first name getter
public String GetName2()
{
String name2 = name.GetLastName();
return name2;
}
public String GetStreetName()
{
String street = address.GetStreet();
return street;
}
// street getter
public String GetCityName()
{
String city = address.GetCity();
return city;
}
// street getter
public String GetStateName()
{
String state = address.GetState();
return state;
}
// street getter
public String GetZipCode()
{
String zip = address.GetZip();
return zip;
}
// street getter
public String GetDate()
{
String time = date.getDateString();
return time;
}
}
这是可能是null异常源的类:
public class Name
{
private String FirstName;
private String LastName;
// define data fields
public Name( String name1 , String name2 )
{
FirstName = name1;
LastName = name2;
}
// constructor
public String GetFirstName()
{
return FirstName;
}
// get first name
public String GetLastName()
{
return LastName;
}
// last name getter
public void SetFirstName( String name1 )
{
FirstName = name1;
}
// first name setter
public void SetLastName( String name2 )
{
LastName = name2;
}
// last name setter
}
不可避免地,使用Employee类似乎会产生以下错误:
Exception in thread "main" java.lang.NullPointerException
at Employee.GetName1(Employee.java:22)
at EmployeeTest.main(EmployeeTest.java:16)
是否可以确定,我在类聚合方面做错了什么?在
Employee
中,constructorname
是局部变量
Name Name=新名称(名称1、名称2)代码>
将其更改为:
name=新名称(名称1、名称2)代码>
因此实例变量name
将被初始化在此处删除类名:
Name name = new Name( name1 , name2 );
因为您没有在这里设置类的name变量,所以您只是在重新创建一个新变量,所以另一个变量保持为null
因此,它应该是:
name = new Name( name1 , name2 );
地址和日期变量也存在同样的问题。您有此错误java.lang.NullPointerException
,因为您应该在Employee
的构造函数中创建Name
的距离,例如:
public Employee(String name1, String name2, String street, String city,
String state, String zip, int month, int day, int year) {
name = new Name(name1, name2);
不是:
为什么在调试程序时人们不想使用调试器?这将是微不足道的检查和修复这种方式。
public Employee(String name1, String name2, String street, String city,
String state, String zip, int month, int day, int year) {
Name name = new Name(name1, name2);