1 public class Test {
 2         int c;  //成员变量(实例变量)
 3         static int s1;  //静态变量(类变量)(全局变量)
 4         public static void main(String[] args){
 5          //static int s2;  //局部变量不允许static定义
 6            int b;   //局部变量
 7            Test t=new Test();
 8            System.out.println(t.c); //成员变量系统会提供默认初始值,随着对象创建而存在(实例变量)
 9 
10            b=1;
11            System.out.println(b); //局部变量使用前必须得赋值,系统不会默认初始化
12 
13             // 静态变量随着类的加载而存在,所有对象共享
14            System.out.println(t.s1);
15            Test t1=new Test();
16            t1.s1=2;   //其中一个对象将其值改变,即共享数据改变了。
17            System.out.println(t1.s1);
18            System.out.println(s1);
19            System.out.println(Test.s1);
20         }
21 }


(1)作用域

成员变量:有4种修饰符决定成员变量的可见性。如表1所示。

局部变量:它所在的花括号内。

静态变量:同成员变量。

java 设置全局静态变量和读取 java 静态局部变量_成员变量

public:表明该成员变量或方法对所有类或对象都是可见的,所有类或对象都可以直接访问。

private:表明该成员变量或方法是私有的,只有当前类对其具有访问权限,除此之外的其它类或对象都没有访问权限。

protected:表明成员变量或方法对该类自身、与它在同一个包中的其它类、在其它包中的该类的子类都可见。

default:表明该成员变量或方法只有自己和与其位于同一包内的类可见。若父类与子类位于同一个包内,则子类对父类的default成员变量或方法都有访问权限;若父类与子类位于不同的package内,则没有访问权限。

这些修饰符只能修饰成员变量,不能用来修饰局部变量。private与protected不能用来修饰类(只有public、abstract、final 能用来修饰类)。

(2)存储位置

成员变量:存储在堆内存中。

局部变量:存储在栈内存中。

静态变量:存储在方法区中。

(3)初始值

成员变量:有默认初始值。

局部变量:没有默认初始值,使用前必须赋值。

静态变量:有默认初始值。

(4)调用方式

成员变量:对象.实例变量

静态变量:类.静态变量    或者    对象.静态变量

局部变量:直接用。

(5)生命周期

成员变量:与类的实例化对象作用范围相同,当类被实例化时,成员变量就会在内存中分配空间并初始化,直到这个被实例化对象的生命周期结束,成员变量的生命周期才结束。

静态变量:只要类被加载,JVM就会给类的静态变量分配存储空间。

局部变量:在方法被调用,或者语句被执行的时候存在,当方法调用完,或者语句结束后,就自动释放。

(6)与对象的相关性

静态变量不依赖于特定的实例,是所有对象共享的数据。静态变量属于类,在内存中只有一个复制(所有实例都指向同一个内存地址),只要静态变量所在的类被加载,这个静态变量就会被分配空间,即可被使用了。

成员变量是每个对象所特有的数据。成员变量属于对象,只有对象被创建后,成员变量才会被分配空间,才能被使用,它在内存中存在多个复制。