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

When should I use static methods in a class and what are the benefits?

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

Q:一个方法中的静态变量保存它的值,即使在方法被执行时也是如此,但是只有在它的包含方法中才可以访问它,但是静态方法的最佳定义是什么?

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

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

谢谢


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

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

1
2
3
4
5
6
// 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中的静态概念相比,这一点很难做到。


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

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


静态方法的语法(php):

1
2
3
4
5
6
7
<?php
class Number {
    public static function multiply($a, $b) {
        return $a * $b;
    }
}
?>

客户端代码:

1
echo Number::multiply(1, 2);

这比:

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

由于multiply()方法不使用任何类变量,因此不需要Number的实例。


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


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

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


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

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


PHP中的静态方法:

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

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


静态方法的一个常见用法是命名的构造函数习惯用法。请参阅:http://www. PARASIFIF.COM/C++-FAQLIT/Ctos。


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

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

进一步阅读链接!


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