JAVA实例成员和类成员
用static 关键字可以声明类变量和类方法,其格式如下:
static type classVar;
static returnType classMethod({paramlist}) {
…
}
如果在声明时不用static 关键字修饰,则声明为实例变量和实例方法。
1) 实例变量和类变量
每个对象的实例变量都分配内存,通过该对象来访问这些实例变量,不同的实例变量是不同的。
类变量仅在生成第一个对象时分配内存,所有实例对象共享同一个类变量,每个实例对象对类变量的改变都会影响到其它的实例对象。类变量可通过类名直接访问,无需先生成一个实例对象,也可以通过实例对象访问类变量。
2) 实例方法和类方法
实例方法可以对当前对象的实例变量进行操作,也可以对类变量进行操作,实例方法由实例对象调用。
但类方法不能访问实例变量,只能访问类变量。类方法可以由类名直接调用,也可由实例对象进行调用。类方法中不能使用this或super关键字。
例3-7 是关于实例成员和类成员的例子。
【例3-7】
class Member {
static int classVar;
int instanceVar;
static void setClassVar(int i) {
classVar=i; // 类方法可以访问类变量
// instanceVar=i; // 类方法不能访问实例变量
}
static int getClassVar()
{ return classVar; }
void setInstanceVar(int i)
{ classVar=i; //实例方法不但可以访问类变量,也可以实例变量
instanceVar=i; }
int getInstanceVar( )
{ return instanceVar; }
}
public class MemberTest{
public static void main(String args[]) {
Member m1=new member();
Member m2=new member();
m1.setClassVar(1);
m2.setClassVar(2);
System.out.println("m1.classVar="+m1.getClassVar()+"
m2.ClassVar="+m2.getClassVar());
m1.setInstanceVar(11);
m2.setInstanceVar(22);
System.out.println("m1.InstanceVar="+m1.getInstanceVar
()+" m2.InstanceVar="+m2.getInstanceVar());
}
}
类成员 是大家共有一个,属于类的
实例成员 就是一人一个 属于对象
类成员就是被static修饰的成员变量,比如 static int n;当类加载的时候它就会被加载
实例成员是没有被static 修饰的成员变量, 比如 int m;加载类的时候它不会被加载,而是等到创建对象时才会被实例化.实例成员是慢于类成员被加载的
方法同样如此,被static修饰的方法随着类的加载而执行,此时还没有创建对象,那些没有被static修饰的方法就不能执行,所以在类方法中不能调用没被static修饰的方法