类变量与实例变量 类方法与实例方法<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
类变量和类方法
用static 关键字可以声明类变量和类方法,其格式如下:
static type classVar;
static returnType classMethod({paramlist}) {
…
}
实例变量和实例方法
如果在声明时不用static 关键字修饰,则声明为实例变量和实例方法。
1) 实例变量和类变量
每个对象的实例变量都分配内存,通过该对象来访问这些实例变量,不同的实例变量是不同的。
类变量仅在生成第一个对象时分配内存,所有实例对象共享同一个类变量(也就是所有实例对象共享一个内存空间),每个实例对象对类变量的改变都会影响到其它的实例对象 (就像c语言中指向同一个地址(既同一个内存空间)的不同指针变量,改变每一个指针的值都会影响到其他指针的值) 。类变量可通过类名直接访问,无需先生成一个实例对象,也可以通过实例对象访问类变量。
2) 实例方法和类方法
实例方法可以对当前对象的实例变量进行操作,也可以对类变量进行操作,实例方法由实例对象调用。
但类方法不能访问实例变量,只能访问类变量。类方法可以由类名直接调用,也可由实例对象进行调用。类方法中不能使用this或super关键字。
个人理解(个人认为这样,不知道对不对,呵呵,希望高手指导)
1 类变量的声明是要用static来声明的,在生成第一个对象时分配内存,其数值可以通过实例来改变,各实例中的类变量互相影响,既个实例共享类变量中的值。(假设有3个book实例,有类变量BookNum表示图书总数,在每一个book实例中修改BookNum均会影响图书的总数)实例变量 不需要用static来声明,每个实例各占用一块内存空间,在创建实例是划分,个实例变量互不影响)。
2类方法其可以不用实例化而直接调用。类方法中不可以出现 this 关键字,不可以直接访问类中的非类成员(既类变量和类方法)。 |||| 实例方法就是一般的方法,要实例化后才可以用。实例化后的数值是另开辟一些内存来保存的。既每一个实例划分一块内存空间
关于实例成员和类成员的例子。
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());
}
}
文章评论(0条评论)
登录后参与讨论