黑马程序员技术交流社区

标题: 静态变量和非静态变量有什么区别了? [打印本页]

作者: 卖火柴    时间: 2013-12-20 13:04
标题: 静态变量和非静态变量有什么区别了?
本帖最后由 卖火柴 于 2013-12-21 08:26 编辑

静态变量和非静态变量有什么区别了?
作者: 谢文斌    时间: 2013-12-20 13:08
本帖最后由 谢文斌 于 2013-12-20 13:25 编辑

比如:你建立了一个黑马培训班级类。
里面有一个静态变量赋予的值是班主任的人数,假设是5个。

创建
安卓班28期对象,班主任分配给这个班了,所以数量减1;
创建
云七班对象,又分配一班主任,数量再减1,注意,这时候,班主任还剩3个!!!

静态变量,就是多个对象共享一个数据。
而非静态变量,是每个对象的特有数据。

当然了,它还有优先于对象存在,随着类的加载而加载,消失而消失,还能直接被类名调用这些特点
还有还有
静态只能调用静态哈,想想它的特性就知道为什么了,因为它存在的时候,非静态的成员可能还没出世呢。

作者: 如远行客    时间: 2013-12-20 13:53
本帖最后由 如远行客 于 2013-12-20 13:54 编辑

静态变量和非静态变量变量使用上的区别:
静态变量可以用“类名.变量名”来使用,它使用之前不需要实例化一个对象。
非静态变量的用法是“实例名.变量名”,在使用非静态变量之前一定要实例化一个对象。
静态变量和非静态变量在内存中存在的区别:
静态变量存放在内存中一个特殊的堆里,这个堆里面存放的都是静态成员,这个对最先创建,最晚清理,里面的变量也是这样,系统的垃圾回收器在程序运行过程中不会清理这一块内存,直到程序完全结束才清理。
非静态变量就存放在一般的堆里面,垃圾回收器会不定时的清理这块内存空间,所以,非静态变量可能在不用的时候被清理掉。
作者: 土豆泥    时间: 2013-12-20 14:00
实例变量要new后,才能调用静态的就不用,可以直接调用.实例变量一开始是不存在的,要new后,系统才给分配内存,才能访问而静态变量是系统一开始就为它分配了内存,可以直接访问。
静态变量是属于一个类的;普通变量属于这个类的实例。
静态变量通过类名来访问;普通变量通过创建的实例来访问。
生存周期不同,静态变量生存周期为程序的存在周期; 非静态变量的存在周期取决于实例化的类的存在周期。 静态成员不能访问非静态成员;
非静态成员可以访问静态成员。
作者: 王子斌    时间: 2013-12-20 14:34
1.内存分配
静态变量在应用程序初始化时,就存在于内存当中,直到它所在的类的程序运行结束时才消亡;而非静态变量需要被实例化后才会分配内存。
2.生存周期
静态变量生存周期为应用程序的存在周期;非静态变量的存在周期取决于实例化的类的存在周期。
3.调用方式
静态变量只能通过“类.静态变量名”调用,类的实例不能调用;非静态变量当该变量所在的类被实例化后,可通过实例化的类名直接访问。
4.共享方式
静态变量是全局变量,被所有类的实例对象共享,即一个实例的改变了静态变量的值,其他同类的实例读到的就是变化后的值;非静态变量是局部变量,不共享的。




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