用户操作
[留言]  [发消息]  [加为好友] 
订阅我的博客
XML聚合    FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
xinhuo1125的公告
文章分类
    存档

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

    先简单的说一下,类中用 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数组声明详解

    • 发表评论
    • 评论内容:
    •  
    Copyright © xinhuo1125
    Powered by CSDN Blog