成员变量、局部变量和静态变量的区别(2)

由static修饰的变量称为静态变量,其实质上就是一个全局变量。如果某个内容是被所有对象所共享,那么该内容就应该用静态修饰;没有被静态修饰的内容,其实是属于对象的特殊描述。

示例:

class Person{
      //成员变量,实例变量
      String name;
      //静态变量,类变量
      //所有对象共享的属性用static修饰
      static String country = "CN";
      public void show(){
            System. out.println(country + ":" + name);
            //等效语句:System.out.println(Person.country+ ":" + this.name);
      }
}
class StaticDemo{
      public static void main(String[]args){
            Personp = new Person();
            System. out.println(p.country);
            //可以用类名直接调用
            System. out.println(Person.country);
      }
}

结果:

CN

CN 

成员变量和静态变量的区别

1、两个变量的生命周期不同

成员变量随着对象的创建而存在,随着对象被回收而释放。

静态变量随着类的加载而存在,随着类的消失而消失。

2、调用方式不同

成员变量只能被对象调用。

静态变量可以被对象调用,还可以被类名调用。

3、别名不同

成员变量也称为实例变量。

静态变量也称为类变量。

4、数据存储位置不同

成员变量存储在堆内存的对象中,所以也叫对象的特有数据。

静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据。

列表对比:

成员变量、局部变量、静态变量的区别 

 

 

成员变量

 

局部变量

 

静态变量

 

定义位置

 

 在类中,方法外

 

方法中,或者方法的形式���数

 

在类中,方法外

 

初始化值

 

有默认初始化值

 

,先定义,赋值后才能使用

 

有默认初始化值

 

调用方式

 

对象调用

 

---

 

对象调用,类名调用

 

存储位置

 

堆中

 

栈中

 

方法区

 

生命周期

 

与对象共存亡

 

与方法共存亡

 

与类共存亡

 

别名

 

实例变量

 

---

 

类变量

 
 

小结:

尽管三者的本质都是变量,可是使用时却有相当大的区别,稍不留神就可能陷入陷阱。且先记住:在一个类中,如果一个变量能够用来描述一个类的属性,那就定义为成员变量,否则,它就应该定义为局部变量。而如果一个变量在全局中都能使用(某个内容是被所有对象所共享),那么我们就可以把这个变量用static来修饰,即为静态变量。(还要注意它与静态方法的紧密联系,这里且不细述了)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/1b9ed62ac94bdd00055c649f8b0207e1.html