第4章 Java面向对象的编程技术2.doc

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

2017ll + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档