• 对象类static用法小结


    查了好多资料,发现还是不全,干脆自己整理吧,至少保证在我的做法正确的,以免误导读者,也是给自己做个记录吧!

        关键字static有一段不寻常的历史。

        (一)起初,C引入关键字static是为了表示退出一个块儿后依然存在的局部变量。在这种情况下术语“static”是有意义的:变量分歧存在,当再次进入该块时仍然存在。如:

    int add()
    {
      static a=1;
      return a++;
    }
    
    void main()
    {
      int b=0;
      int i;
      for(i=0;i<3;i++)
        b+=add();
      printf("b=%d\n",b);
    }
    
    result: b=3

        (二)随后,static在C中有了第二种含意,表示不能被其他文件拜访的全局变量和函数。为了防止引入一个新的关键字,关键字static被重用了。

        (三)最后,C++第三次重用了这个关键字,与后面付与的含意完整不一样,这里将其解释为:属于类且不属于类对象的变量和函数。这个含意与Java相同。对于static,此时要从静态域和静态方法两个方面斟酌。

        1、静态域

        如果将域定义为static,每个类中只有一个这样的域。而每一个对象对于全部的实例域却都有自己的一份拷贝。例如,假定须要给每一个雇员付与唯一的标识码。这里给Employee类添加一个实例id和一个静态域nextId:

    class Employee
    {
      private int id;
      private static int nextId=1;
    }

        现在,每一个雇员对象都有一个自己的id域,但这个类的全部实例将共享一个nextId域。换句话说,如果有1000个Employee类的对象,则有1000个实例域id。但是,只有一个静态域nextId。即使没有一个雇员对象,静态域nextId也存在。它属于类,而不属于任何独立的对象。

        每日一道理
    天又快黑了,这座忙碌的城市又将入睡,让这劳累的“身躯”暂别白日的辛勤,让它入睡,陪伴着城市中的人们进入梦乡。当空的弯月正深情地注视着这座城市与城市中的人们,看着家家户户的灯渐渐熄灭,它在床头悄悄奏响“明月曲”……

        上面实现一个简单的方法:

    public void setid()
    {
      id=nextId;
      nextId++;
    }

        假定为harry设定雇员标识码:

    harry.setId();

        harry的id域被设置为静态域nextId以后的值,并静态域nextId的值加1:

    harry.id=Employee.nextId;
    Employee.nextId++;

        2、静态方法

        静态方法是一种不能向对象实行操作的方法。静态方法不能操作对象,所以不能在静态方法中拜访实例域。但是,静态方法可以拜访自身类中的静态域。所以,静态方法一般用于以下两种情况:

        

    • 一个方法不须要拜访对象状态,其所需参数都是通过表现参数供给(例如:Math.pow)
    • 一个方法只需拜访类的静态域

        静态方法还有一种罕见的用处。NumberFormat类使用factory方法产生不同风格的格式对象(这个我自己也没看懂是什么意思-P112)。

        须要注意,不须要使用对象调用静态方法。例如,不须要构造Math类对象就能够调用Math.pow。

        同理,main方法就是一个静态方法。main方法不对任何对象进行操作。事实上,在启动程序时还没有任何一个对象。静态的main方法将执行并创建程序所需的对象。

        

        参考资料:

        《JAVA核心技术 卷1 第8版》4.4静态域与静态方法

        

    文章结束给大家分享下程序员的一些笑话语录: 看新闻说中国输入法全球第一!领先了又如何?西方文字根本不需要输入法。一点可比性都没有。

  • 相关阅读:
    python使用数据库的一些操作
    正则表达式整理
    tomcat启动成功但是访问不到官网
    控制反转 依赖注入 AOP 和 IOC
    abstract 和 interface区别
    input文本框 鼠标点击默认消失,不输入离开鼠标恢复默认值
    声明式管理事务:基于AspectJ的xml方式
    使用注解配置声明式事务
    spring事物 (mu课)
    oracle表之数据类型
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3080607.html
Copyright © 2020-2023  润新知