黑马程序员技术交流社区
标题:
静态变量和实例变量除了语法上不同,在运行过程中会有什么不同?
[打印本页]
作者:
林翔
时间:
2012-4-3 00:26
标题:
静态变量和实例变量除了语法上不同,在运行过程中会有什么不同?
在语法上静态变量前要加static关键字,而实例变量前则不加。但是在运行过程中呢?求详解!
作者:
薛飞飞
时间:
2012-4-3 00:33
在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。
例如,对于下面的程序,无论创建多少个实例对象,永远都只分配了一个staticVar变量,并且每创建一个实例对象,这个staticVar就会加1;但是,每创建一个实例对象,就会分配一个instanceVar,即可能分配多个instanceVar,并且每个instanceVar的值都只自加了1次。
public class VariantTest
{
public static int staticVar = 0;
public int instanceVar = 0;
public VariantTest()
{
staticVar++;
instanceVar++;
System.out.println(“staticVar=” + staticVar + ”,instanceVar=” + instanceVar);
}
}
作者:
程旦
时间:
2012-4-3 00:40
简单点说,静态变量又叫类变量,它是属于类的而不是对象。它先于对象存在的,而且只加载一次,实例变量是属于对象的,要先创建对象才有实例对象。。。
作者:
陈苓
时间:
2012-4-3 01:13
本帖最后由 格式化 于 2012-4-3 01:14 编辑
区别有三个:
1、实例化变量只能被对象调用。
静态成员变量除了可以被对象调用,还可以被类名调用。
2、实例化变量也称为对象变量,或者实例变量
静态变量也称为类变量。
3、(生命周期)实例化变量随着对象的出现而出现,随着对象的消失而消失。
静态变量随着类的加载而加载,随着累的消失而消失。
作者:
刘元明
时间:
2012-4-3 08:40
静态变量又称类变量,它是随着类的加载而加载,随着类的消亡而消亡,而实例变量不是;
在运行的时候,实例变量不初始化不能参与运算,而类变量不初始化会有一个默认初始化值。
作者:
褚代江
时间:
2012-4-3 08:53
楼上说的都很好,就不多“复制”一边了,
作者:
曹魁
时间:
2012-4-3 08:59
本帖最后由 曹魁 于 2012-4-3 09:42 编辑
声明为static的方法有以下几条限制:
· 它们仅能调用其他的static方法。
· 它们只能访问static数据。
· 它们不能以任何方式引用this或super.
如果你需要通过计算来初始化你的static变量,你可以声明一个static块,Static块仅在该类被加载时执行一次。
static关键字有自己的局限性和优越性,所以有的并不是定义成静态的就是好的,要看问题的具体情况而定!
静态变量生命周期比较长,而实例变量的使用周期比较短,基本上用完之后就会被释放或者被当作垃圾回收,定义为静态变量就会驻留在内存中,无端的浪费内存空间!
作者:
葛尧
时间:
2012-4-3 13:38
也可以说是我和你之间 共享数据和私有数据的区别
作者:
郑涛
时间:
2012-4-3 14:40
静态变量和实例变量的区别:
1、所属不同
静态成员变量也称为类变量,它属于整个类,而且它多了一种调用方式直接用类名调用。
实例变量,是被对象调用的,是所属具体对象的。
2、生命周期不同
静态成员变量是随着类的加载而加载的,也是随着类的消亡而消亡,生命周期与所属的类的生命周期一致
实例变量随着对象的加载而加载,随着对象的消失而消失。按对象的生命周期存在。
3、存储位置不同
静态成员变量存储在方法区的静态方法区中
实例变量存储对象所属堆内存中
4、共享不同
静态成员变量被所有的类对象所共享
实例变量是对象中的特有数据
作者:
莫运飞
时间:
2012-4-3 17:17
静态:static
用法: 是一个修士符,用于修饰成员(成员变量,成员函数).
当成员被静态修饰后,就多了一个调调用方式,除了一个被对象调用外,
还可以直接被类名调用。用法:类名.静态成员。
static特点:
1,随着累的加载而加载(静态会随着类的消失而消失,说明它的生命周期最长)
2,优先于对象存在
3,被所有对象所共享
4,可以直接被类名所调用。
实例变量和类变量的区别:
1,存放位置:
类变量随着类的加载而存在与方法区中;
实例变量随着对象的建立而存在与堆内存中。
2,生命周期:
类变量生命周期最长,随着类的消失而消失。
实例变量生命周期随着对象 消失而消失。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2