"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。
要解决您的问题,请先初始化 lastName
、firstName
和 fullName
变量,然后再在您的构造函数中使用它们。
没有参数的例子:
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);
}
我看过 "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。
要解决您的问题,请先初始化 lastName
、firstName
和 fullName
变量,然后再在您的构造函数中使用它们。
没有参数的例子:
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);
}