java 中的变量分为成员变量(又叫实例变量), 静态变量和局部变量.
1. 成员变量
1.1 成员变量 (实例变量) 是在类中定义的非 static 修饰的变量, 可以不用赋初始值, 不同的数据类型有默认的初始值.
- 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);
- }
- }
运行结果:
byte 类型的默认值为: 0
short 类型的默认值为: 0
int 类型的默认值为: 0
long 类型的默认值为: 0
float 类型的默认值为: 0.0
double 类型的默认值为: 0.0
char 类型的默认值为'
1.2 实例变量只有初始化一个副本之后才可以使用, 每当实例化一个对象, 会在堆中创建一个副本并初始化, 各个对象中对实例变量的修改互不影响.
- package test;
- import org.junit.Test;
- public class VariableTest {
- int age;
- @Test
- public void cvariable2(){
- VariableTest vt1=new VariableTest();
- vt1.age++;
- System.out.println("vt1.age:"+vt1.age); //vt1.age:1
- VariableTest vt2=new VariableTest();
- vt2.age++;
- System.out.println("vt2.age:"+vt2.age); //vt2.age:1
- }
- }
2. 静态变量
定义在类中被 static 修饰的变量, 类加载时在方法区中分配存储空间, 被类所拥有, 任意一个对象对其修改都会改变该变量的值.
- 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 能用来修饰类).
来源: http://www.bubuko.com/infodetail-3041019.html