A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 卖火柴 中级黑马   /  2013-12-20 13:04  /  1200 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 卖火柴 于 2013-12-21 08:26 编辑

静态变量和非静态变量有什么区别了?

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

4 个回复

倒序浏览
本帖最后由 谢文斌 于 2013-12-20 13:25 编辑

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

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

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

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

评分

参与人数 1技术分 +1 收起 理由
V_John + 1

查看全部评分

回复 使用道具 举报
本帖最后由 如远行客 于 2013-12-20 13:54 编辑

静态变量和非静态变量变量使用上的区别:
静态变量可以用“类名.变量名”来使用,它使用之前不需要实例化一个对象。
非静态变量的用法是“实例名.变量名”,在使用非静态变量之前一定要实例化一个对象。
静态变量和非静态变量在内存中存在的区别:
静态变量存放在内存中一个特殊的堆里,这个堆里面存放的都是静态成员,这个对最先创建,最晚清理,里面的变量也是这样,系统的垃圾回收器在程序运行过程中不会清理这一块内存,直到程序完全结束才清理。
非静态变量就存放在一般的堆里面,垃圾回收器会不定时的清理这块内存空间,所以,非静态变量可能在不用的时候被清理掉。

评分

参与人数 1技术分 +1 收起 理由
V_John + 1

查看全部评分

回复 使用道具 举报
实例变量要new后,才能调用静态的就不用,可以直接调用.实例变量一开始是不存在的,要new后,系统才给分配内存,才能访问而静态变量是系统一开始就为它分配了内存,可以直接访问。
静态变量是属于一个类的;普通变量属于这个类的实例。
静态变量通过类名来访问;普通变量通过创建的实例来访问。
生存周期不同,静态变量生存周期为程序的存在周期; 非静态变量的存在周期取决于实例化的类的存在周期。 静态成员不能访问非静态成员;
非静态成员可以访问静态成员。

评分

参与人数 1技术分 +1 收起 理由
V_John + 1

查看全部评分

回复 使用道具 举报
1.内存分配
静态变量在应用程序初始化时,就存在于内存当中,直到它所在的类的程序运行结束时才消亡;而非静态变量需要被实例化后才会分配内存。
2.生存周期
静态变量生存周期为应用程序的存在周期;非静态变量的存在周期取决于实例化的类的存在周期。
3.调用方式
静态变量只能通过“类.静态变量名”调用,类的实例不能调用;非静态变量当该变量所在的类被实例化后,可通过实例化的类名直接访问。
4.共享方式
静态变量是全局变量,被所有类的实例对象共享,即一个实例的改变了静态变量的值,其他同类的实例读到的就是变化后的值;非静态变量是局部变量,不共享的。

评分

参与人数 1技术分 +1 收起 理由
V_John + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马