static修饰变量只占一份内存空间与泛型

来源:互联网 发布:烟台海颐软件 编辑:程序博客网 时间:2024/06/05 14:34

Chapter 11,持有对象

在本章的第二个代码中【如下】,

package holding;



import java.util.ArrayList;


class Apples {
private  static int number;// 表示苹果数量
private final long id= number++;
public long id(){
return id;
}
}


class Oranges {
}


public class CopyOfApplesAndOrangesWithoutGenerics {
public static void main(String [] args){
ArrayList<Apples> apples = new ArrayList<Apples>();
for (int i = 0; i<4; i++)
apples.add(new Apples());

//apples.add(new Oranges());
//illegal 

for(int i=0;i<apples.size();i++){
System.out.println((apples.get(i)).id());
}

for(Apples a:apples){
System.out.println(a.id());
}
}

}

我们可以看到程序的执行效果图【如下】:


如果我没改掉代码public static int number;---->public int number;得到的城西执行结果如下:

这个时候我们看到输出全部成0,这是为什么呢?【知识点1】原因在于,在程序中,被static 修饰的成员变量只有一份,占一个固定空间,所以虽然在后面申请了三个Apples对象,但是仍然只有一个number ,所以对其做number++赋值给id,然后便可以成功返回啦。

【知识点2】通过使用泛型,就可以在编译期防止将错误类型的对象放到容器中。比如此例中的ArrayList<Apples> apples = new ArrayList<Apples>();

1 0
原创粉丝点击