黑马程序员技术交流社区

标题: 静态变量和实例变量除了语法上不同,在运行过程中会有什么不同? [打印本页]

作者: 林翔    时间: 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