原创 java中的类对象和实例对象

2007-10-16 11:08 4663 7 7 分类: 软件与OS

类变量与实例变量 类方法与实例方法<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


   类变量和类方法


  static 关键字可以声明类变量和类方法,其格式如下:
  static type classVar;
  static returnType classMethod({paramlist}) {
  
  }


实例变量和实例方法
   如果在声明时不用static 关键字修饰,则声明为实例变量和实例方法。
  1 实例变量和类变量
  每个对象的实例变量都分配内存,通过该对象来访问这些实例变量,不同的实例变量是不同的。
  类变量仅在生成第一个对象时分配内存,所有实例对象共享同一个类变量(也就是所有实例对象共享一个内存空间),每个实例对象对类变量的改变都会影响到其它的实例对象 (就像c语言中指向同一个地址(既同一个内存空间)的不同指针变量,改变每一个指针的值都会影响到其他指针的值) 。类变量可通过类名直接访问,无需先生成一个实例对象,也可以通过实例对象访问类变量。



  2 实例方法和类方法
  实例方法可以对当前对象的实例变量进行操作,也可以对类变量进行操作,实例方法由实例对象调用。
  但类方法不能访问实例变量,只能访问类变量。类方法可以由类名直接调用,也可由实例对象进行调用。类方法中不能使用thissuper关键字。


个人理解(个人认为这样,不知道对不对,呵呵,希望高手指导)


  1 类变量的声明是要用static来声明的,在生成第一个对象时分配内存,其数值可以通过实例来改变,各实例中的类变量互相影响,既个实例共享类变量中的值。(假设有3book实例,有类变量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条评论)

登录后参与讨论
相关推荐阅读
cat_li 2012-03-28 09:28
评论:@小野兽的小草窝 博客中提到的“【博客 大赛】虚焊,你伤不起~~”
这个确实很重要,不起眼的问题会折腾人很久 ...
cat_li 2010-11-05 14:14
怎样用Realview MDK生成bin文件?
怎样用Realview MDK生成bin文件?       使用RVCT的fromelf.exe工具进行转换。也就是说首先将源文件编译链接成*.axf的文件,然后使用fromelf.exe工具将*....
cat_li 2010-10-28 21:35
新塘M051中文技术参考手册
  今天无意中在网上看到的,这个要比研讨会上光盘上提供的那个中文版详细很多,看了一下,就是英文手册的完整翻译版 需要的朋友可以到这里下载:http://www.wang1jin.com/bbs/vie...
cat_li 2010-10-26 16:50
保护三极管基础
这次出现的问题是使用了ULN2003,由于直接用它的输入级接入模块的输入端,因此出现了问题。 由于电缆上存在分布电感和分布电容,因此很容易出现耦合,在ISO7637的实验中,存在高频脉冲250V,20...
cat_li 2010-08-10 09:04
广岛无冤魂
1945年8月6日,美国的B-29“空中堡垒”轰炸机向日本广岛投下代号为”男孩”(Boy)的原子弹,实施了人类首次核轰炸。 总听到有些人(尤其是中国人)说,战争是日本军国主义者全面发动的,日本人民是受...
cat_li 2010-07-15 16:59
RT-Thread学习笔记--- 初步认识RT-Thread
最近对RT-Thread很感兴趣,准备学习一下,硬件使用安富莱开发板2.0。软件使用keil MDK   RT-Thread的目录结构 其中Bsp是针对各个具体的平台,可以认为是用户代码。为了方...
我要评论
0
7
1
2
3
4
5
6
7
8
9
0
关闭 热点推荐上一条 /3 下一条