公共静态方法与公共方法

Posted

技术标签:

【中文标题】公共静态方法与公共方法【英文标题】:Public static methods vs public methods 【发布时间】:2011-04-19 10:27:02 【问题描述】:

公共静态方法和公共方法有什么区别?为什么要使用公共静态方法?

【问题讨论】:

【参考方案1】:

Math 类的方法是静态的。所以,在做

Math.round(average)

Math 类本身不会因您所做的事情而改变 - 它只返回一个值或对您传递的值起作用。

所以 - 静态方法对实用程序很有用。像

StringUtils.removeWhitespaceFrom(textContent:String):String

BrowserUtils.openInNewWindow(url:String):void

在其他任何事情上使用静态方法是非常不寻常的。不要使用像 'getInstance()' 这样的静态方法来创建单例 - 而是查看依赖注入的框架。

【讨论】:

【参考方案2】:

静态方法是不特定于类(对象)的任何实例的方法,它们是不允许包含此引用的方法,您可以通过类直接访问它们(而不是对象实例)

【讨论】:

【参考方案3】:

静态方法可以用作重载的构造函数。 ActionScript 没有函数重载,所以有时我会这样写:

public class Foo 
    public static function fromBar(bar:Bar):Foo 
        var foo:Foo = new Foo();
        ... //initializing foo object from bar
        return foo;
     

    public static function fromBaz(baz:Baz):Foo 
        var foo:Foo = new Foo();
        ... //initializing foo object from baz
        return foo;
    

【讨论】:

【参考方案4】:

为了让你的概念更清楚,假设如果你想知道你的类被实例化了多少次,你将在你的类构造函数中使用静态变量 counter,每次创建你的对象。

然后您必须使用静态方法来访问此数据,否则您可以将变量声明为 public 或 default 并使用类名访问它,但这违反了 OOP 原则。这是一个小例子

公共类 CAR

private static var Counter:int=0;

私有函数 CAR() Counter++;

公共静态函数 ReturnTotalCarInstances():int 返回计数器;

静态变量有它们的好处,这就是大多数编程语言都提供它的原因。计数实例是静态变量的小用途。它们的使用范围要大得多。重点是用于在 Class 的所有对象之间全局共享数据。

【讨论】:

以上是关于公共静态方法与公共方法的主要内容,如果未能解决你的问题,请参考以下文章

php静态方法-“静态函数”和“公共静态函数”有啥区别?

什么时候应该使用公共静态方法

“公共静态”还是“静态公共”?

公共静态方法中的异步任务返回 null

私有的嵌套类(内部或静态)是不是可能具有具有公共访问权限的方法?

使用来自其他类的公共静态 HashTable 的同步方法。我怎样才能使这个方法线程安全?