【问题标题】:Conceptual: public static function vs public function of a class having no constructor and attributes概念:公共静态函数与没有构造函数和属性的类的公共函数
【发布时间】:2015-09-24 10:27:57
【问题描述】:

这个问题只是为了澄清概念,所以请不要强调“为什么有人会写这样一个类”

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

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. 在函数完全执行后,以静态方式调用函数会自动清空内存吗?或者函数本身不消耗内存(唯一的成本是内部变量的计算和内存)?

【问题讨论】:

    标签: class oop static execution-time


    【解决方案1】:

    静态方法是一种 OO 语言的 hack,它不允许正常功能(我在看你 Java!)。

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

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

    【讨论】:

    • thnx alot.. 但这个问题实际上与 java 无关。更多的是关于 OOP 的。您能否定义是否有人具有上述课程场景,那么更好的选择是什么?制作静态或通过实例调用它?它的效率是多少?在时间和记忆中..
    • 或者如果我编辑的“java”标签令人困惑,那么我应该删除标签吗?我编辑 java 只是因为我知道 java 人擅长 OOP :)
    • @DanishAhmed:如果问题与 Java 无关,则不应将其标记为 Java。 PHP 和 JavaScript 的人擅长 OOP,这并不意味着你也标记他们。
    • 我是新手.. 对不起 :) 我编辑了我的标签.. 顺便说一句 thnx :)
    猜你喜欢
    • 2011-03-01
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    • 1970-01-01
    • 2017-04-30
    • 2011-02-08
    • 2019-10-02
    • 1970-01-01
    相关资源
    最近更新 更多