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

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能用来修饰类)。

未经授权,不得转载!
原文地址:https://www.cnblogs.com/bluetree2/p/10792970.html