黑马程序员技术交流社区

标题: 类的属性的定义的深层次思考 请教大家怎么理解 [打印本页]

作者: 沙漠里的小鱼    时间: 2013-1-27 23:34
标题: 类的属性的定义的深层次思考 请教大家怎么理解
本帖最后由 张向辉 于 2013-1-29 11:48 编辑

public class Demo2 {
private int id;
private String name;
private List<String> list = new ArrayList();// 这里的属性为什么要这样写
public Demo2() {
  super();
  // TODO Auto-generated constructor stub
}
public Demo2(int id, String name, List<String> list) {
  super();
  this.id = id;
  this.name = name;
  this.list = list;
}
public int getId() {
  return id;
}
public void setId(int id) {
  this.id = id;
}
public String getName() {
  return name;
}
public void setName(String name) {
  this.name = name;
}
public List<String> getList() {
  return list;
}
public void setList(List<String> list) {
  this.list = list;
}
}

定义属性list  为什么要这样写 private List<String> list = new ArrayList();

作者: 周志强    时间: 2013-1-28 02:29
private List<String> list = new ArrayList();// 这里的属性为什么要这样写
从以下几个方面给你回答:
1、private修饰符:是为了把集合封装起来,安全,只在下面使用了set和get方法留出访问的接口函数
2、在这里使用了多态,父类的引用指向了子类对象(父类是List集合,子类是ArrayList),他还有一个常用的子类是LinkedList,注意他们使用的范围啊!!!
3、在这里使用了泛型,“<String>”表示集合中的元素为存储的都是String类型的对象,不加泛型编译时会出现不安全的提示哦!
4、定义集合是用来存储对象的,是一个容器,具体使用什么容器,什么集合?那要看你的需求了!
好了  加油 啊 希望可以帮到你
作者: 彭昆    时间: 2013-1-28 12:11
唯一的原因就是:
当我们直接写成private List<String> list;时,类在初始化的时候,引用类型的字段默认赋值为null,基本类型就根据其类型来定,如int ->0 boolean-> false等.
这样如果我们在后面使用list的时候就会包空指针异常。使用在最开始的初始化的时候,我们强制让其指向 new ArrayList(); 避免出现这个空指针异常。
你不写也可以,每次使用的是用if判断一下是否为空,这样就比较麻烦。
还是你所说的id,name,list叫字段,不叫属性,具有getter和setter的getList()和setList()才叫属性。属性和字段可以不同名。
作者: 谢毅    时间: 2013-1-28 15:02
int类型的变量默认是0;而引用数据类型默认是null,你不那么写也行,使用引用数据的时候先判断就可以
作者: 沙漠里的小鱼    时间: 2013-1-28 21:26
彭昆 发表于 2013-1-28 12:11
唯一的原因就是:
当我们直接写成private List list;时,类在初始化的时候,引用类型的字段默认赋值为null ...

讲的不错 可是我还是不明白
作者: 彭昆    时间: 2013-1-28 22:40
沙漠里的小鱼 发表于 2013-1-28 21:26
讲的不错 可是我还是不明白

一句话:避免空指针异常。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2