什么时候应该在课堂上使用静态方法,有什么好处?
我有静态variables的概念,但在一个类中静态方法的好处是什么。 我已经在一些项目上工作,但我没有做一个静态的方法。 每当我需要调用一个类的方法,我创build该类的一个对象,并调用所需的方法。
Q:一个方法中的静态variables即使在执行方法时也保存它的值,但只能在其包含的方法中访问,但静态方法的最佳定义是什么?
问:调用静态方法而不创build该类的对象是静态方法的唯一好处?
问:静态方法的可访问范围是多less?
谢谢
您对静态variables的描述更适合于C中的静态variables。面向对象术语中的静态variables的概念在概念上是不同的。 我在这里从Java的经验。 静态方法和字段在概念上不属于某个事物的实例时非常有用。
考虑一个Math类,其中包含一些常见的值,如Pi或e,以及一些有用的函数,如sin和cos。 创build单独的实例来使用这种function是没有意义的,因此静态效果更好:
// 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的angular度来看)函数,或更好地称为方法,不能有静态局部variables。 只有类可以有静态成员,正如我所说,与C中静态的想法相比,它们很less
静态方法不会将“this”指针传递给对象,因此它们不能引用非静态variables或方法,但可能因此在运行时效率更高(更less的参数并且没有创build和销毁对象的开销)。
它们可以被用来把连贯的方法归类到一个单一的类别中,或者对类别中的对象进行操作,比如工厂模式。
静态方法的语法(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()
方法不使用任何类variables,因此不需要Number
的实例。
从本质上讲,静态方法让你用面向对象的语言编写过程代码。 它可以让你调用方法,而不必先创build一个对象。
你只想在一个类中使用静态方法的时候,给定的方法不需要创build一个类的实例。 这可能是当试图返回一个共享的数据源(例如一个Singleton)或执行一个不会修改对象的内部状态的操作(例如String.format)。
这个维基百科条目很好地解释了静态方法: http : //en.wikipedia.org/wiki/Method_(computer_science)#Static_methods
静态方法的一个常见用法是使用命名的构造函数方式。 请参阅: http : //www.parashift.com/c++-faq-lite/ctors.html#faq-10.8 。
静态variables和静态方法绑定到类,而不是类的实例。
静态方法不应该包含“状态”。 任何与状态有关的东西都应该绑定到一个实例化的对象,而不是类。
PHP中的静态方法 :
可以在不创build类对象的情况下调用。
只能调用静态方法和函数。
当你希望在类的不同对象之间共享一些信息时,使用静态variables。由于variables是共享的,每个对象都可以更新它,更新的值也可以用于所有其他对象。 由于静态variables可以被共享,所以这些通常被称为类variables。
静态元素可以从任何上下文(即脚本中的任何地方)访问,因此您可以访问这些方法,而无需将类的实例从对象传递到对象。
静态元素在类的每个实例中都可用,因此您可以设置要为types的所有成员提供的值。
进一步阅读链接 !