导致获取的属性值为null的情况
当构造函数的参数名和属性名相同时,且没有添加this关键字时容易出错。如图:
图1:
当修改参数名,如图:
图2:
此时获取到的值不为null。
获取的属性值为null的简单示例:
User.java
package com.yubai;
/**
* Created by bayu on 9/14/2017.
*/
public class User{
private String name;
private String sex;
public User(String name, String sex) {
this.name = name;
sex = sex;//正确的代码为this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
string .java
package com.yubai;
import java.util.ArrayList;
import java.util.List;
/**
* Created by bayu on 9/14/2017.
*/
public class string {
public static void main(String[] args) {
List<User> userList = new ArrayList<User>();
userList.add(new User("吴光雷", "男"));
userList.add(new User("吴桥", "男"));
userList.add(new User("陆晓敏", "男"));
userList.add(new User("王佳俊", "男"));
userList.add(new User("秦菁", "女"));
for (User u:userList) {
System.out.println(u.getName()+","+u.getSex());
}
}
}
运行结果
吴光雷,null
吴桥,null
陆晓敏,null
王佳俊,null
秦菁,null
为null原因:
属性名sex和构造函数传入的参数名sex相同导致的
修改方法两种:
1. 通过this关键字
this.sex = sex2. 修改参数名
public User(String aName, String aSex) {
name = aName;
sex = aSex;
}
总结:
构造函数的定义两种方法:
1. 构造函数的参数名与属性名不同,建议在参数名上加前缀a。如:
属性名:name
参数名:aName
- 构造函数的参数名与属性名相同,但需要借助this。如:
this.name = name