用户操作
[即时聊天] [发私信] [加为好友]
amecleID:xinhuo1125
1914次访问,排名2万外好友0人,关注者0
xinhuo1125的文章
原创 3 篇
翻译 0 篇
转载 1 篇
评论 0 篇
最近评论
文章分类
    收藏
      相册
      存档
      软件项目交易
      订阅我的博客
      XML聚合  FeedSky
      订阅到鲜果
      订阅到Google
      订阅到抓虾
      订阅到BlogLines
      订阅到Yahoo
      订阅到GouGou
      订阅到飞鸽
      订阅到Rojo
      订阅到newsgator
      订阅到netvibes

      原创 static成员与非静态成员的区别以及使用方法收藏

      新一篇: java数组声明详解 | 旧一篇: 类名与.java文件名的关系

      先简单的说一下,类中用 static 关键字修饰的成员都是静态成员,是这个类通用的特征( 属性 )行为( 方法 );而不用 static 修饰的成员即为非静态成员,或者叫实例成员,对于用同一个类实例出的每一个对象,都有他自己的一套实例成员,贵自己的实例对象独有。

      使用方法如下:

      静态成员一般通过类名调用,也可以通过对象来调用,或者在所在类的其他方法( 可以是静态,也可以是非静态 )里直接使用(不管如何调用,只要记住一点:同类所有对象共用同一个静态成员)。但是在静态方法里,只能直接访问静态成员,不能直接访问非静态成员。(要想在静态方法里访问非静态成员,可以实例该类的一个对象,然后在通过对象调用非静态成员。)

      非静态成员只能通过实例调用,别无他法。

      只要记住一点:把 static 成员和非静态成员彻底分隔开,他们各自作用不同,用法不同,之间没有任何联系。

      class Test{

          
      static int b = 999;
          
      int a = 4;

          
      void m1(){
              Test obj1 
      = new Test();
              System.out.print(
      "m1:   "+a+"  "+obj1.a);
              a
      =1;
              System.out.print(
      "  "+a+"  "+obj1.a);
              obj1.a
      =2;
              System.out.println(
      "  "+a+"  "+obj1.a);
              obj1.m2();
              System.out.println(
      "m1:   "+a+"  "+obj1.a);    // Tag1:可以很好的观察m2方法中的a究竟代表什么
          }


          
      void m2(){
              Test obj2 
      = new Test();
              System.out.print(
      "m2:   "+a+"  "+obj2.a);
              a
      =8;
              System.out.print(
      "  "+a+"  "+obj2.a);
              obj2.a
      =9;
              System.out.println(
      "  "+a+"  "+obj2.a);
              System.out.print(b);    
      //在非静态方法中直接使用静态成员(相当于通过对象调用)
              m3();        //在非静态方法中直接使用静态成员(相当于通过对象调用)
          
      //    obj2.m1();                // Tag2:当本语句被释放,同时Tag1被注释,会有不错的死循环效果
          }


          
      static void m3(){
              System.out.println(b);
              b
      =666;        //静态方法只能调用其他静态成员(也包括方法)
          
      //    a=666;        //静态方法不能调用非静态属性(也不能调用静态方法)
          }


          
      public static void main(String [ ] args){
              System.out.println(
      "  :   a obj a obj a obj");
              Test obj 
      = new Test();
          
      //    obj.a=5;                // Tag3:帮助你充分理解:类中的属性是对象的属性
              obj.m1();
              System.out.println(
      "main: "+obj.a);
              Test.m3();        
      //通过类名调用静态方法
              m3();        //在静态方法内,可以直接调用本类的其他静态成员
              obj.m3();        //通过对象调用静态方法
              System.out.println(Test.b);
              System.out.println(b);
              System.out.println(obj.b);    
      //通过对象调用静态属性
          
      //    System.out.println(a);    //main也是静态方法,当然不能直接访问非静态属性

          }


      }

       

      (个人见解,仅供参考。欢迎提出不同见解,共同讨论!)

      发表于 @ 2007年04月16日 06:06:00|评论(loading...)|编辑

      新一篇: java数组声明详解 | 旧一篇: 类名与.java文件名的关系

      评论:没有评论。

      发表评论  


      当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
      Csdn Blog version 3.1a
      Copyright © amecle