成员变量:
1.实例变量
2.类变量,也称为静态变量用关键字(Static修饰)
class A
{
float x;//实例变量定义;
static int y;//类变量定义
}
实例变量与类变量的主要区别:
- 在内存分配的空间上。不同对象的同名实例变量分配不同的内存空间,变量之间的取值互不影响;不同对象的同类变量分配相同的内存空间,也就是说多个对象共享类变量,改变其中一个对象的类变量的值会影像其他对象中相应的类变量的值
- 在内存分配的时间上。当类的字节码文件被加载到内存时,类变量就分配了相应空间;实例变量是当类的对象创建时才会被分配内存。
访问方式不同。实例变量必须用对象名访问;类变量可以用类名访问,也可以用对象名访问。
eg1.
class Rectangle
{
private float length;
private float width;
static int number=0;//定义数量
Rectangle (float l,float w)
{
length=l;
width=w;
number++;
}
}
public class Jpro8 {public static void main(String[] args) {
// TODO Auto-generated method stubSystem.out.println("当前矩形的个数为:"+Rectangle.number); Rectangle r1=new Rectangle(1.0f,2.0f); System.out.println("当前矩形的个数为:"+r1.number); Rectangle r2=new Rectangle(3.0f,4.0f); System.out.println("当前矩形的个数为:"+Rectangle.number); System.out.println("当前矩形的个数为:"+r1.number); System.out.println("当前矩形的个数为:"+r2.number); }
}
程序分析:main()方法的第一个语句执行时系统首先将Rectangle类加载到内存,并为类变量number分配了内存空间,此时,就可以用类名Rectangle直接引用类变量number;当执行下面两句:
Rectangle r1=new Rectangle(1.0f,2.0f);
Rectangle r2=new Rectangle(3.0f,4.0f);
系统创建了矩形对象r1和r2后,才用对象r1,r2来引用对象number,但这种方式并不提倡使用,因为其可读性较差。从最后三条语句的输出结果也可以看出来,r1,r2和Rectangle共享类变量number。
常量
如果一个类的成员变量前加 final修饰符,该成员变量就为常量;常量的名字习惯用大写字母表示,如:
final double PI=3.14159;
常量不占内存,申明时必须初始化。对象可以使用常量,但是不能更改它的值。