Java中的static修饰变量只占一份内存空间
2016-08-04 11:25
561 查看
[b]一.Java中的static关键字
[/b]
1. Chapter 11,持有对象
在本章的第二个代码中【如下】,
我们可以看到程序的执行效果图【如下】:
如果我没改掉代码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变量脱离对象存在。
[/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变量脱离对象存在。
相关文章推荐
- Java学习疑点(2)--被static修饰的静态变量与实例变量之间生命周期的区别
- java final static 与final 修饰变量的区别
- Java程序运行时,没有赋值的基本类型变量会在内存中分配空间吗?
- java中成员变量被static所修饰
- Java static 变量、方法的什么时候分配内存
- java中如何理解多个对象共享同一个静态成员变量(多个实例的static变量会共享同一块内存区域)
- java 变量的内存空间及数据类型
- java中的static(包括类前面修饰的static、方法前面修饰的static、成员变量前面修饰的static)
- Java - Static和Final修饰类属性变量及初始化
- java中的static(包括类前面修饰的static、方法前面修饰的static、成员变量前面修饰的static)
- java学习之旅36--面向对象_09_static变量和方法_内存分析static
- static关键字修饰变量的加载和初始化过程(Java)
- java中 static变量和方法到底是存在内存什么区域呢?
- 【Java】【TIJ】验证类中的static域只有一份存储空间,与类实例化的对象个数无关。
- JAVA中static修饰成员变量时 和 不修饰成员变量时的区别 如下面的两个例子 的区别 为什么下面的是错误的
- java中 static变量和方法到底是存在内存什么区域呢?
- Java static修饰属性(类变量)、static修饰方法(类方法)
- java中 static变量和方法到底是存在内存什么区域?
- Java的static修饰变量,方法,代码块的初始化顺序
- java中的static(包括类前面修饰的static、方法前面修饰的static、成员变量前面修饰的static)