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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

在语法上静态变量前要加static关键字,而实例变量前则不加。但是在运行过程中呢?求详解!

9 个回复

倒序浏览
        在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。
        例如,对于下面的程序,无论创建多少个实例对象,永远都只分配了一个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 01:14 编辑

           区别有三个:   
          1、实例化变量只能被对象调用。
         静态成员变量除了可以被对象调用,还可以被类名调用。
      2、实例化变量也称为对象变量,或者实例变量
         静态变量也称为类变量。
      3、(生命周期)实例化变量随着对象的出现而出现,随着对象的消失而消失。
         静态变量随着类的加载而加载,随着累的消失而消失。
回复 使用道具 举报
静态变量又称类变量,它是随着类的加载而加载,随着类的消亡而消亡,而实例变量不是;
在运行的时候,实例变量不初始化不能参与运算,而类变量不初始化会有一个默认初始化值。
回复 使用道具 举报
楼上说的都很好,就不多“复制”一边了,
回复 使用道具 举报
本帖最后由 曹魁 于 2012-4-3 09:42 编辑

声明为static的方法有以下几条限制:
· 它们仅能调用其他的static方法。
· 它们只能访问static数据。
· 它们不能以任何方式引用this或super.
如果你需要通过计算来初始化你的static变量,你可以声明一个static块,Static块仅在该类被加载时执行一次。
static关键字有自己的局限性和优越性,所以有的并不是定义成静态的就是好的,要看问题的具体情况而定!
静态变量生命周期比较长,而实例变量的使用周期比较短,基本上用完之后就会被释放或者被当作垃圾回收,定义为静态变量就会驻留在内存中,无端的浪费内存空间!
回复 使用道具 举报
也可以说是我和你之间 共享数据和私有数据的区别
回复 使用道具 举报
静态变量和实例变量的区别:
1、所属不同
    静态成员变量也称为类变量,它属于整个类,而且它多了一种调用方式直接用类名调用。
    实例变量,是被对象调用的,是所属具体对象的。
2、生命周期不同
    静态成员变量是随着类的加载而加载的,也是随着类的消亡而消亡,生命周期与所属的类的生命周期一致
    实例变量随着对象的加载而加载,随着对象的消失而消失。按对象的生命周期存在。
3、存储位置不同
    静态成员变量存储在方法区的静态方法区中
    实例变量存储对象所属堆内存中
4、共享不同
    静态成员变量被所有的类对象所共享
    实例变量是对象中的特有数据
回复 使用道具 举报
静态:static
用法: 是一个修士符,用于修饰成员(成员变量,成员函数).
当成员被静态修饰后,就多了一个调调用方式,除了一个被对象调用外,
还可以直接被类名调用。用法:类名.静态成员。


static特点:
1,随着累的加载而加载(静态会随着类的消失而消失,说明它的生命周期最长)
       

2,优先于对象存在
3,被所有对象所共享
4,可以直接被类名所调用。


实例变量和类变量的区别:

1,存放位置:
类变量随着类的加载而存在与方法区中;
实例变量随着对象的建立而存在与堆内存中。
2,生命周期:
类变量生命周期最长,随着类的消失而消失。
实例变量生命周期随着对象 消失而消失。

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