一、数据成员特点
——表示java类的状态
——声明数据成员必须指定变量名以及所属类型,同时还可以指定其他属性
——数据成员的类型可以是基本数据类型,byte,short,char,int,long,float,double,boolean;也可以是引用型数据类型,类(enum枚举是特殊的类),数组,接口;
——数据成员分为实例变量与类变量(也称静态变量)
——【修饰符】 变量数据类型 变量名 【= 初值】;
二、修饰符
——public,公共访问控制符,指定该变量为公共的,它可以被任何对象的方法访问。
——private,私有访问控制符,指定该变量只允许自己类的方法访问,其他类(包括)子类均不能访问此变量。
——protected,保护访问控制符,指定该变量只允许自己的类及其子类或同一包中的其他类访问,在子类中可以覆盖此变量。
——缺省,缺省访问控制符,当变量没有public,private或protected修饰时即为缺省,表示,在同一包中的其他类可以访问此成员变量,而其他包中的类不能访问该成员变量。
——final,最终修饰符,指定该变量的值不能改变,只允许被赋值一次。
——static,静态修饰符,由static修饰的变量为类变量,下面有分析。
——transient,过渡修饰符,指定该变量是一个系统保留,暂无任何作用的临时性变量
——volatile,易失修饰符,指定该变量可以同时被几个线程控制和修改。
三、解析实例变量与类变量
1、概述:
首先,我们要明白类的对象也称为类的实例,顾名思义,实例变量是存在于在我们使用类创建的对象即实例中的,而类变量存在与创建的类中。
2、实例变量
——没有static修饰的变量称为实例变量(Instance Variables)
——用来存储所有实例都需要的属性信息,不同实例的属性值可能会不同
——可通过下面的表达式访问实例属性的值
<实例名>.<实例变量名>

public static void main(String[] args) {
		
		circle c1, c2;     //circle类创建两个实例c1,c2
		c1 = new circle();
		c2 = new circle();
		c1.radius = 1;     //实例c1给成员变量radius赋值1
		c2.radius = 2;     //实例c2给成员变量radius赋值2
		System.out.println(c1.radius);
		System.out.println(c2.radius);
	}

	public static class  circle
	{ 
		// 成员变量
		int radius; 
	}

输出结果:
1
2
总结:可以看出在circle类创建的实例每个都自有radius的值,改变其中一个实例中的radius的值,并不能改变其他实例中radius的值。在这里还看不出所以然,接着看类变量。
3、类变量
——也称为静态变量,声明时需加static修饰符
——不管类的对象有多少,类变量只存在一份,在整个类中只有一个值
—— 类初始化的同时就被赋值
——适用情况
①类中所有对象都相同的属性
②经常需要共享的数据
③系统中用到的一些常量值
——引用格式
<类名 | 实例名>.<类变量名>

public static void main(String[] args) {
		
		circle c1, c2;     //circle类创建两个实例c1,c2
		c1 = new circle();
		c2 = new circle();
		c1.radius = 1;     //实例c1给成员变量radius赋值1
		System.out.println(c1.radius);
		System.out.println(circle.radius);
		
		c2.radius = 2;     //实例c2给成员变量radius赋值2	
		System.out.println(c2.radius);
		System.out.println(circle.radius);	
		
		System.out.println(c1.radius);//此时实例c1中radius的值也是1
		
	}

	public static class  circle
	{ 
		// 成员变量
		static int radius; 
	}

输出结果:
1
1
2
2
2
总结:正如上面介绍的,类变量只存在一份,在整个类中只有一个值,当这个类创建的任一实例改变了类变量的值,其他的实例的该类变量的值也会改变,我们从名称也可以看出,类变量与实例变量的区别,类只有一个,而实例可以创建无数个,所以类变量也只存在一个,所以实例共用。