代码之家  ›  专栏  ›  技术社区  ›  Naveed

我什么时候应该在类中使用静态方法,有什么好处?

  •  62
  • Naveed  · 技术社区  · 14 年前

    我有静态变量的概念,但是类中静态方法的好处是什么。我做过一些项目,但没有使方法静态化。每当我需要调用一个类的方法时,我创建一个该类的对象并调用所需的方法。

    问: 方法中的静态变量保持其值,即使在执行方法时也是如此,但只能在其包含方法中访问,但是静态方法的最佳定义是什么?

    问: 调用静态方法而不创建该类的对象是静态方法的唯一优点吗?

    问: 静态方法的可访问范围是什么?

    谢谢

    10 回复  |  直到 9 年前
        1
  •  61
  •   D.C.    9 年前

    您对静态变量的描述更适合C中的描述。面向对象术语中静态变量的概念在概念上是不同的。我从这里学到了Java经验。静态方法和字段在概念上不属于某个实例时非常有用。

    考虑一个包含一些公共值(如pi或e)和一些有用函数(如sin和cos)的数学类。创建单独的实例来使用这种功能是没有意义的,因此它们作为静态的更好:

    // This makes little sense
    Math m = new Math();
    float answer = m.sin(45);
    
    // This would make more sense
    float answer = Math.sin(45);
    

    在OO语言(同样,从Java透视图)中,函数也称为方法,不能有静态的局部变量。只有类可以有静态成员,正如我所说,与C中的静态概念相比,这一点很难做到。

        2
  •  15
  •   PhilMY    14 年前

    静态方法不会将“this”指针传递给对象,因此它们不能引用非静态变量或方法,但因此在运行时效率更高(参数更少,创建和销毁对象时没有开销)。

    它们可以用于将内聚方法分组为单个类,或者作用于类的对象,例如工厂模式中的对象。

        3
  •  12
  •   jmoz    14 年前

    静态方法的语法(php):

    <?php
    class Number {
        public static function multiply($a, $b) {
            return $a * $b;
        }
    }
    ?>
    

    客户端代码:

    echo Number::multiply(1, 2);
    

    这比:

    $number = new Number();
    echo $number->multiply(1, 2);
    

    作为 multiply() 方法不使用任何类变量,因此不需要 Number .

        4
  •  8
  •   David Hodgson    14 年前

    本质上,静态方法允许您用面向对象的语言编写过程代码。它允许您调用方法,而不必先创建对象。

        5
  •  5
  •   AndrewMurphy    14 年前

    在类中使用静态方法的唯一时间是给定方法不需要创建类的实例时。这可能是在尝试返回共享数据源(如singleton)或执行不修改对象内部状态的操作时(例如string.format)。

    这个维基百科条目很好地解释了静态方法: http://en.wikipedia.org/wiki/Method_(computer_science)#Static_methods

        6
  •  3
  •   Travis    14 年前

    静态变量和静态方法绑定到类,而不是类的实例。

    静态方法不应包含“状态”。任何与状态相关的东西都应该绑定到一个实例化的对象,而不是类。

        7
  •  2
  •   Kyle Lutz    14 年前

    静态方法的一个常见用法是命名的构造函数习惯用法。见: http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.8 .

        8
  •  2
  •   Ihsanullah khan    14 年前

    Static Methods in PHP :

    可以在不创建类对象的情况下调用。

    只能调用静态方法和函数。

        9
  •  1
  •   sunny    12 年前

    静态变量用于在类的不同对象之间共享某些信息。由于变量是共享的,因此每个对象都可以更新它,并且更新后的值也可用于所有其他对象。 由于静态变量可以共享,因此这些变量通常称为类变量。

        10
  •  1
  •   Pkrishna    10 年前

    静态元素可以从任何上下文(即脚本中的任何位置)访问,因此您可以访问这些方法,而无需将类的实例从对象传递到对象。

    静态元素在类的每个实例中都可用,因此可以设置希望对类型的所有成员可用的值。

    供进一步阅读 a link 你说什么?