"Name" class 空指针异常;试图返工代码

"Name" class nullpointerexception; attempting to rework code

我看过 "What is a NullPointerException and how do I fix it?",尽管那个问题及其答案根本没有帮助。 我明白我的问题; "NameTest" 程序试图在 "Name" 对象为 null 时引用它,但我不确定如何修改它来解决这个问题,因为我希望 lastName、firstName 和 fullName 可以通过以下方式访问所有 "Name" 方法。在 "Name" 程序中,我试图创建一个 "Name" class,用它可以创建一个空白名称对象,然后分配一个 String/Stringbuffer 值(取决于哪个会更好)与 setName() 方法。这是 "Name" 代码:

public class Name
{
private StringBuffer lastName;
private StringBuffer firstName;
private StringBuffer fullName;

public Name()
{
    lastName.replace( 0, 0, "" );
    firstName.replace( 0, 0, "" );
    fullName.replace( 0, 0, "" );
}

public Name( String lN, String fiN )
{
     lastName.replace( 0, lN.length() - 1, lN );

     firstName.replace( 0, fiN.length() - 1, fiN );     

     fullName.replace( 0, (lastName.length() + firstName.length()) + 2, lastName + ", " + firstName);
}

public Name( String fuN )
{
    String[] fuNTemp = fuN.split( ", " );
    lastName.replace( 0, fuNTemp[0].length() - 1, fuNTemp[0] );
    firstName.replace( 0, fuNTemp[1].length() - 1, fuNTemp[1] );

    fullName.replace( 0, (lastName.length() + firstName.length()) + 2, lastName + ", " + firstName);
}

public void setName( String n )
{
    String[] nTemp = n.split( ", " );
    lastName.replace( 0, nTemp[0].length() - 1, nTemp[0] );
    firstName.replace( 0, nTemp[1].length() - 1, nTemp[1] );

    fullName.replace( 0, (lastName.length() + firstName.length()) + 2, lastName + ", " + firstName);
}

public void setName( String lN, String fiN )
{
    lastName.equals( lN );
    firstName.equals( fiN );

    fullName.equals( lastName + ", " + firstName );
} 

public StringBuffer getName()
{
    return fullName;
}
}

这是程序 "NameTest",我创建它只是为了帮助计算 "Name":

public class NameTest
{
public static void main( String [] args )
{
    Name test = new Name();

    System.out.println( test.getName() );
    System.out.println();

    String Doe = new String( "Doe" );
    String John = new String( "John" );

    test.setName( Doe, John );

    System.out.println( test.getName() );
}
}

这是来自 "NameTest" 的错误消息:

Exception in thread "main" java.lang.NullPointerException
    at Name.<init>(Name.java:9)
    at NameTest.main(NameTest.java:5)

您还没有为 StringBuffer 变量初始化值。默认情况下它将具有空值,并且在构造函数中您试图用字符串“”替换空值。这导致 NullPointerException。

初始化您的 StringBuffer 变量。

private StringBuffer lastName=new StringBuffer("lastName");
private StringBuffer firstName=new StringBuffer("firstName");
private StringBuffer fullName=new StringBuffer("fullName");

您的 Name class 中的 NullPointerException 之所以发生,是因为您在其值为 null 时尝试访问它。值为 null 因为这是非原始变量类型的默认值。 N K Raju 在他的 Google 网站上对数据类型有很好的 tutorial

要解决您的问题,请先初始化 lastNamefirstNamefullName 变量,然后再在您的构造函数中使用它们。

没有参数的例子:

public Name() {
    lastName = new StringBuffer();
    firstName = new StringBuffer();
    fullName = new StringBuffer();
}

带有参数的示例:

public Name(String lN, String fiN) {
   lastName = new StringBuffer(lN);
   firstName = new StringBuffer(fiN);
   fullName = new StringBuffer(lN + ", " + fiN);
}