概念:公共静态函数vs没有构造函数和属性的类的公共函数

时间:2015-09-24 10:27:58

标签: class oop static execution-time

这个问题只是为了清除概念,所以请不要强调"为什么会有人写这样的课程"

我已经知道如何在不创建对象实例的情况下访问静态函数(意味着不修改对象的状态)。但是让我们考虑一下这两个只有两个函数的类:

class A {
    /* no class attributes */
    /* no constructor */
    public function someFunction(){
    }

    public static function someStaticFunction(){
    }
}

class B {
    /* no class attributes */
    /* no constructor */
    public function some_function(){
    }

    public function someNonStaticFunction(){
    /* with same implementation as of A::someStaticFunction() */ 
    }
}

对于A类:没有构造函数和属性,所有函数都是公共的。所以,

  1. 是否有任何意图将此函数声明为静态函数?
  2. 如果我使用类B,而不是使用类A,那么我可以在创建此类的实例后调用该函数。调用这个函数需要多少钱?在执行时间和内存方面(考虑没有构造函数和属性)
  3. 创建一个类的实例会为对象分配内存,但是如果该对象根本没有属性,那么它会占用内存吗?
  4. 在函数完全执行后,将函数调用为static会自动刷新内存吗?或者函数本身没有消耗内存(唯一的成本是内部变量的计算和内存)?

1 个答案:

答案 0 :(得分:1)

静态方法是OO语言不允许正常函数的黑客攻击(我正在看你Java!)。

静态方法是类上的方法,它不操纵从该类派生的任何对象实例的状态。 (这不是100%准确,静态方法仍然可以操纵任何类型的对象,只要它被传递到它中。)

简而言之,如果您的方法中没有this关键字,则为静态。无论你实际上是将它称为静态,还是为它初始化一个虚拟实例,都无关紧要。