我什么时候应该在课堂上使用静态方法?有什么好处?

时间:2010-01-17 06:10:45

标签: oop static-methods static-variables

我有静态变量的概念但是类中静态方法的好处是什么。我曾经参与过一些项目,但我并没有将方法设为静态。每当我需要调用类的方法时,我创建该类的对象并调用所需的方法。

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

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

问:静态方法的可访问范围是多少?

由于

10 个答案:

答案 0 :(得分:61)

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

考虑一个Math类,它包含一些常见的值,如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中静态的概念相比,它们很少。

答案 1 :(得分:15)

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

它们可用于将内聚方法分组到单个类中,或者用于对其类的对象进行操作,例如在工厂模式中。

答案 2 :(得分:12)

静态方法的语法(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的实例。

答案 3 :(得分:8)

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

答案 4 :(得分:5)

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

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

答案 5 :(得分:3)

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

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

答案 6 :(得分:2)

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

答案 7 :(得分:2)

Static Methods in PHP

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

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

答案 8 :(得分:1)

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

答案 9 :(得分:1)

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

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

进一步阅读a link

相关问题