论 static 变量与实例变量

1.存储区域不同:静态变量存储在静态存储区,普通变量存储在堆中;
2.静态变量与类相关,普通变量则与实例相关,说细一点:
class Demo {
public static String a;
public String b;
public static void main(String[] args) {
   Demo d = new Demo();
   d.a; // 警告,虽然可以通过编译,但没有意义
   d.b; // 正确
   Demo.a; // 对static变量的正确引用
   Demo.b; // 错误
}
3.内存分配方式不同。static字段对每个类来说都只有一份,无论你创建多少对象,该static区域都只有一份,它对于这些对象来说是共享的;而非static字段,因为其从属于对象,因此每有一个对象,就会为该变量申请一个存储空间;
4.生命周期不同。从程序运行开始,static域就已经确定下来,因此在没有创建对象之前,就可以引用该区域变量及函数,而非static域的变量及函数,必须等实例化之后才可以通过对象来调用。
5.理解了this之后,更能体会到static的含义。static方法就是没有this的方法,这也就是为什么在static方法中不能引用非static变量,因为该方法内没有隐含的this,编译器无从知道这个变量是属于哪一个类的。 参考资料:《Java编程思想》
回答者: 冰封的秋日 | 二级 | 2010-7-23 21:39 
          
 我个人就是这么理解,虽然通俗,但是易懂:
静态变量:独立存在的变量,只是位置放在某个类下,可以直接类名加点调用静态变量名使用。并且是项目或程序一启动运行到该类时就直接常驻内存。不需要初始化类再调用该变量。用关键字static声明。静态方法也是同样,可以直接调用。
实例变量:就是相当于该类的属性,需要先初始化该类,就是new 该类后,才可以调用。但是该类未被再次使用被垃圾回收器回收后,该实例也将不存在了,就是不在内存中了。

虽然说的通俗,但是本质就是这样。理解就行。
给分吧。 回答者: xcg9593 | 六级 | 2010-7-23 21:47 
          
 静态变量是从你使用到这个类开始一直到程序结束
实例变量是在这个变量的作用域存在,比方函数里面的局部实例变量,在函数返回时就不存在了

你可能感兴趣的:(Java随笔)