- 1、本文档共17页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4章 Java面向对象的编程技术2
第4章 Java面向对象的编程技术
4.3 static 关键字
4.3.1. 实例变量和类变量的区别
在讲述类的时候我们讲过 类体的定义包括成员变量的定义和方法的定义,并且成员变
量又分为实例变量和类变量,用static修饰的变量是类变量.那么类变量和实例变量有什么区别呢
我们已经知道 一个类通过使用new运算符可以创建多个不同的对象,这些对象将被分
配不同的内存空间,现在再说得准确些就是 不同的对象的实例变量将被分配不同的内存空间,如果类中的成员变量有类变量,那么所有的对象的这个类变量都分配给相同的一处内存,
改变其中一个对象的这个类变量会影响其它对象的这个类变量.也就是说对象共享类变量.
如
class Takecare
{ static int x;
int y;
… … .
}
class A
{ Takecare A1=new Takecare();
Takecare A2=new Takecare();
}
内存模式如图4.10所示.如果程序中使用了
A1.x=18
这时如果输出A1.x,A2.x的值,结果相同都是18.
关于实例成员和类成员的例子。 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());
}
}
class ABCD
{
char data;
static int share_data;
}
class Demo
{
ABCD a,b,c,d;
}
我们知道,当Java程序执行时,类的字节码文件被加载到内存,如果该类没有创建对象,类的实例成员变量不会被分配内存.但是,类中的类变量,在该类被加载到内存时,就分配了相应的内存空间.如果该类创建对象,那么不同对象的实例变量互不相同,即分配不同的内存空间,而类变量不再重新分配内存,所有的对象共享类变量,即所有的对象的类变量是相同的一处内存空间,类变量的内存空间直到程序退出运行,才释放所占有的内存.
4.3.2 通过类名直接访问类变量
类变量的生存期不依赖于对象,相当于C语言中全局变量的作用。其它类可以不通过实例化访问它们。
public class StaticVar
{
public static int number = 5;
}
public class OtherClass
{
public void method()
{
int x = StaticVar.number;
}
}
实例方法和类方法的区别
我们已经知道类体中的方法分为实例方法和类方法两种,用static 修饰的是类方法.
二者有什么区别呢 我们已经知道,当一个类创建了一个对象后,这个对象就可以调用该类
的方法.那么实例方法和类方法有什么区别呢
当类的字节码文件被加载到内
文档评论(0)