您的位置:首页 > 编程语言 > Java开发

Java中的static修饰变量只占一份内存空间

2016-08-04 11:25 561 查看
[b]一.Java中的static关键字
[/b]
1. 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>();

2. static关键字的一些基本使用规则

 1) 多个对象共享一份数据资源。(java没有全局变量)

 2) static修饰的函数或属性,可以根据类名点的方式去调用。【class.count】

 3)它修饰的成员,在类加载的时候加载并完成初始化,只执行一次。

 4)无法从静态的上下文中引用非静态属性或者方法。this也不可以用在static修饰的上下文中。

5)在jvm读取class文件时,就对static的属性和函数进行处理.

6)static变量脱离对象存在。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐