java中的成员变量、静态变量与局部变量

java中的变量分为成员变量(又叫实例变量)、静态变量和局部变量。

1.成员变量

1.1 成员变量(实例变量)是在类中定义的非static修饰的变量,可以不用赋初始值,不同的数据类型有默认的初始值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package test;
 
import org.junit.Test;
 
public class VariableTest {
    byte bt;
    short s;
    int age;
    long l;
    float f;
    double d;
    char c;
    boolean flag;
    String name;
     
    @Test
    public void cvariable(){
        VariableTest vt=new VariableTest();
        System.out.println("byte类型的默认值为:"+vt.bt);
        System.out.println("short类型的默认值为:"+vt.s);
        System.out.println("int类型的默认值为:"+vt.age);
        System.out.println("long类型的默认值为:"+vt.l);
        System.out.println("float类型的默认值为:"+vt.f);
        System.out.println("double类型的默认值为:"+vt.d);
        //'\u0000'为空
        if(c=='\u0000'){
            System.out.println("char类型的默认值为'\u0000'");
        }
        System.out.println("boolean类型的默认值为:"+vt.flag);
        System.out.println("String类型的默认值为:"+vt.name);
    }
}

 运行结果:

1
2
3
4
5
6
7
byte类型的默认值为:0
short类型的默认值为:0
int类型的默认值为:0
long类型的默认值为:0
float类型的默认值为:0.0
double类型的默认值为:0.0
char类型的默认值为'

1.2 实例变量只有初始化一个副本之后才可以使用,每当实例化一个对象,会在堆中创建一个副本并初始化,各个对象中对实例变量的修改互不影响。

1
package test;<br>import org.junit.Test;<br><br>public class VariableTest {<br>    int age; <br>    @Test<br>    public void cvariable2(){<br>        VariableTest vt1=new VariableTest();<br>        vt1.age++;<br>        System.out.println("vt1.age:"+vt1.age);  //vt1.age:1<br>        VariableTest vt2=new VariableTest();<br>        vt2.age++;<br>        System.out.println("vt2.age:"+vt2.age);  //vt2.age:1<br>    }<br>}

2.静态变量

定义在类中被static修饰的变量,类加载时在方法区中分配存储空间,被类所拥有,任意一个对象对其修改都会改变该变量的值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package test;
 
import org.junit.Test;
 
public class VariableTest {
     
    static int num;
     
    @Test
    public void staticVariableTest(){
        VariableTest vt1=new VariableTest();
        vt1.num++;
        System.out.println(vt1.num);   //1
        VariableTest vt2=new VariableTest();
        vt2.num++;
        System.out.println(vt2.num);   //2
    }
     
}

 3.局部变量

局部变量是指定义在方法体中的变量,变量定义后必须赋初始值。若为基本类型,值直接存储在栈中,若为引用类型,其对象存储在堆中,而把对象的引用存储在栈中。

 4.成员变量的作用域

 成员变量的作用域:

  • public:当前类,同一package的其他类,其他package的当前类的子类,其他package的类都可以访问(4);
  • private:只有当前类能访问(1);
  • protected:当前类,同一package的其他类,其他package的当前类的子类都可以访问(3);
  • default:只有当前类和其位于同一包内的类可以访问(2);

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

posted on   BlueTree2  阅读(1049)  评论(0编辑  收藏  举报

努力加载评论中...

导航

点击右上角即可分享
微信分享提示