Java 字符串方法返回null
我试图自学Java编程,来自Python和MatLab背景。在下面的代码中,第一组代码返回使用我定义的默认构造函数时应该返回的内容。然而,在第二组代码中,当我尝试使用特定构造函数时,结果是“null”。我试图理解为什么特定的构造函数返回null,以及如何解决这个问题 第一个代码段:Java 字符串方法返回null,java,string,methods,Java,String,Methods,我试图自学Java编程,来自Python和MatLab背景。在下面的代码中,第一组代码返回使用我定义的默认构造函数时应该返回的内容。然而,在第二组代码中,当我尝试使用特定构造函数时,结果是“null”。我试图理解为什么特定的构造函数返回null,以及如何解决这个问题 第一个代码段: public class Name { String firstName; String middleName; String familyName; public Name() {
public class Name {
String firstName;
String middleName;
String familyName;
public Name() {
firstName = " ";
middleName = " ";
familyName = " ";
}
public Name(String firstName, String middleName, String familyName) {
setFirst(firstName);
setMiddle(middleName);
setFamily(familyName);
}
// setFirst(): first name mutator method
public void setFirst(String f) {
String firstName = f;
}
// setMiddle(): middle name mutator method
public void setMiddle(String m) {
String middleName = m;
}
// setFamily(): family name mutator method
public void setFamily(String fam) {
String familyName = fam;
}
// getFirst(): accessor method
public String getFirst() {
return firstName;
}
// getMiddle(): accessor method
public String getMiddle() {
return middleName;
}
// getFamily(): accessor method
public String getFamily() {
return familyName;
}
// toString(): mutator method
public String toString() {
return getFirst() + " " + getMiddle() + " " + getFamily();
}
public static void main(String[] args) {
Name myName = new Name();
String myNameString = myName.toString();
System.out.print("\n" + myNameString);
}
}
第二代码段:
public static void main(String[] args) {
Name myName = new Name("John", "Doe", "Smith");
String myNameString = myName.toString();
System.out.print("\n" + myNameString);
}
}
您的各种setter方法没有设置类成员,它们只是设置局部变量。将setFirst更改为:
public void setFirst(String f) {
this.firstName = f;
}
您的各种setter方法没有设置类成员,它们只是设置局部变量。将setFirst更改为:
public void setFirst(String f) {
this.firstName = f;
}
在setter方法中声明新的局部变量(与成员同名):
String familyName = fam;
只要写下:
familyName = fam;
最好在其中一个成员前面加前缀(例如,加上“my”),以便将其与局部变量区分开来。我建议使用复杂的IDE,它会警告您声明与成员同名的局部变量。在setter方法中声明新的局部变量(与成员同名):
String familyName = fam;
public void setMiddle(String m) {
String middleName = m;
}
只要写下:
familyName = fam;
最好在其中一个成员前面加前缀(例如,加上“my”),以便将其与局部变量区分开来。我建议使用一个复杂的IDE,它会警告您声明一个与成员同名的局部变量
public void setMiddle(String m) {
String middleName = m;
}
这只是在内存中创建一个名为middleName的新对象
要设置middleName字段的值,不应创建新对象,而应引用该字段:
public void setMiddle(String m) {
middleName = m;
}
这只是在内存中创建一个名为middleName的新对象
要设置middleName字段的值,不应创建新对象,而应引用该字段:
public void setMiddle(String m) {
middleName = m;
}
您没有设置在实例级别定义的字段。您正在set方法中声明一个新变量,而不是执行
此操作。propertyName
etcin在从构造函数调用的setFirst方法中,您正在将firstname分配给只具有方法setFirst作用域的新变量firstname。您需要像这样将该变量分配给当前实例;在我看来,您的public Name()被使用两次可能会导致一些问题。到处都有方法。你可能想了解更多关于方法的知识以及如何更多地使用它们(这里是一个很好的学习网站):FYI toString不是一个mutator,因为它不会更改对象的状态。您没有设置在实例级别定义的字段。您正在set方法中声明一个新变量,而不是从构造函数调用的this.propertyNameetcin setFirst方法,您正在将firstname分配给新变量firstname,该变量的作用域仅为方法setFirst。您需要像这样将该变量分配给当前实例;在我看来,您的public Name()被使用两次可能会导致一些问题。到处都有方法。您可能想了解更多关于方法以及如何更多地使用它们的信息(这里是一个很好的学习站点):FYI toString不是一个变体,因为它不会改变对象的状态。