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); |
由于
本质上,静态方法允许您用面向对象的语言编写过程代码。它允许您调用方法,而不必首先创建对象。
在类中使用静态方法的唯一时间是给定方法不需要创建类的实例时。这可能是在尝试返回共享数据源(如singleton)或执行不修改对象内部状态的操作时(例如string.format)。
这个维基百科条目很好地解释了静态方法:http://en.wikipedia.org/wiki/method_u(computer_science)static_methods
静态变量和静态方法绑定到类,而不是类的实例。
静态方法不应包含"状态"。任何与状态相关的东西都应该绑定到一个实例化的对象,而不是类。
PHP中的静态方法:
可以在不创建类对象的情况下调用。
只能调用静态方法和函数。
静态方法的一个常见用法是命名的构造函数习惯用法。请参阅:http://www. PARASIFIF.COM/C++-FAQLIT/Ctos。
静态元素可以从任何上下文(即脚本中的任何位置)访问,因此您可以访问这些方法,而无需将类的实例从对象传递到对象。
静态元素在类的每个实例中都可用,因此可以设置希望对类型的所有成员可用的值。
进一步阅读链接!
静态变量用于在类的不同对象之间共享某些信息。由于变量是共享的,因此每个对象都可以更新它,并且更新后的值也可用于所有其他对象。由于静态变量可以共享,因此这些变量通常称为类变量。