黑马程序员技术交流社区
标题:
静态变量的使用情况,为什么?
[打印本页]
作者:
jttsai
时间:
2013-7-25 13:47
标题:
静态变量的使用情况,为什么?
是不是能够使用静态的变量的时候都使用静态变量?
比如一个类只会生成一个实例,那么他的所有变量都可以使用静态变量么?
相对来说,静态变量可以在静态方法中使用,非静态变量则不行。
静态变量具有更加广阔的适用性。而且也不会占据更多的空间。
是否会给程序带来一些其他的损耗?
作者:
曹奎
时间:
2013-7-25 13:58
静态成员:在多个对象都需要使用同一个资源的时候适合使用静态变量 或者多个对象拥有一个相同的属性的时候也适合 这样可以节省不必要的内存开支
静态方法:在方法没有涉及到类的非静态变量或者对象的资源的时候适合使用静态方法
作者:
陈贺
时间:
2013-7-25 14:21
静态可以修饰的内容有成员变量和函数。
当对象中出现共享数据时,该数据被被静态所修饰,不会占用内存空间。
静态方法内部没有访问到静态数据时,该功能能可以定义成静态。
可以直接被类名所调用。
类变量随着随着加载而存放于方法区中
类变量生命周期最长随着类的消失而消失
作者:
施大勇
时间:
2013-7-25 14:39
本帖最后由 施大勇 于 2013-7-25 14:40 编辑
首先要明确一下静态static 的特点。
1,凡是static 声明的类成员在类加载时就有了自己的内存,static 声明的字段在静态数据区,static 声明的方法在静态代码区,它们不以对象的存在而存在,类只要一加载到内存中它们就已经存在,而非静态只有创建对象时才会在堆内存中开辟空间。
2,静态声明的成员是所有对象共有的,都可以由类名直接调用。
3,静态字段可以用来计数,比如生成了多少个对象,所有对象都共有的东东才会声明为静态的。
4,对于版主的这个问题 :比如一个类只会生成一个实例,那么他的所有变量都可以使用静态变量么?
我认为若一个类只产生一个对象,那么这里一定会采用构造 方法私有化,并对外提供一个方法,通常取名为getInstace()返回类的实例,产生几个对象与类中的变量是否要使用静态没有什么直接联系。关键还是要看你想让这个变量暴露出去与否?
5,静态变量具有更加广阔的适用性。而且也不会占据更多的空间。是否会给程序带来一些其他的损耗?
非静态的成员一般随着对象的不在使用就会将内存释放,而静态成员的生命周期要长很多,它不会随着某一个对象消亡而消亡,是与类共存亡的。不过对于现在的电脑而言,多几个静态成员对内存的占用可以略不计。
作者:
Mr_Free
时间:
2013-7-27 20:55
静态变量又称为类变量,他是随着类的加载而存在与方法中的, 随着类的消失而消失,生命周期长,比较吃存储空间的。
然后我说一下静态变量的定义环境:当对象中出现共享数据的时候,该数据需要被静态所修饰。
作者:
夜写意
时间:
2013-7-29 01:52
就比如说吧:
作者:
夜写意
时间:
2013-7-29 02:06
就比如说吧:
静态变量就像是饭堂公用的餐具,大家都可以去用。所以只要准备一套餐具就可以供给很多人用。
非静态变量就像是学生自己的餐具。就像中国学生都有筷子,但是没刀叉。美国学生有刀叉但是没筷子。饭堂又只有盘子。所以中国学生想要用刀叉就只能找到美国学生,再和他借。所以要先建立美国学生的对象,然后才能调用他的方法或变量(刀叉),反之亦然。如果中国学生毕业了,离开学校了,就会把筷子带走,学校里面就不用腾出个地方给中国学生放筷子了,美国学生也一样。
本来饭堂只要腾出地方放盘子供给各学生用就可以了,但是如果筷子和刀叉全部都放在饭堂,那中国学生和美国学生毕业走了,却带不走筷子和刀叉。后面进来日本学生用的是勺子(打比方)用不到刀叉或者筷子,这样饭堂存放刀叉和筷子的空间就浪费了。
所以这学校就像是内存,学生就是那对象,饭堂就是那静态区。用静态变量有利有弊。
作者:
狼牙
时间:
2013-7-29 09:27
静态成员:在多个对象都需要共享同一个资源的时候适合使用静态变量或者多个对象拥有一个相同的属性的时候可以使用,这样可以减少内存的开销
静态方法:在方法没有涉及到类的非静态变量或者对象的资源的时候适合使用静态方法
静态方法有两种调用方式:1.类名.方法名(参数列表);2.对象名.方法名(参数列表)。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2