Когда я должен использовать статические методы в классе и каковы преимущества? - PullRequest
62 голосов
/ 17 января 2010

У меня есть понятие статических переменных, но каковы преимущества статических методов в классе. Я работал над некоторыми проектами, но я не делал метод статичным. Всякий раз, когда мне нужно вызвать метод класса, я создаю объект этого класса и вызываю нужный метод.

Q: Статическая переменная в методе сохраняет свое значение, даже когда метод выполняется, но доступна только в содержащем его методе, но каково лучшее определение статического метода?

Q: Является ли вызов статического метода без создания объекта этого класса единственным преимуществом статического метода?

Q: Каков доступный диапазон для статического метода?

Спасибо

Ответы [ 10 ]

62 голосов
/ 17 января 2010

Ваше описание статической переменной больше соответствует тому, что можно найти в 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);

В ОО-языках (опять же, с точки зрения Java) функции или более известные как методы не могут иметь статические локальные переменные. Только классы могут иметь статические члены, которые, как я уже сказал, мало похожи на идею статического в C.

15 голосов
/ 18 января 2010

Статические методы не передают указатель «this» объекту, поэтому они не могут ссылаться на нестатические переменные или методы, но, следовательно, могут быть более эффективными во время выполнения (меньше параметров и нет накладных расходов на создание и уничтожение объекта). объект).

Их можно использовать для группировки связанных методов в один класс или для воздействия на объекты их класса, например в фабричном шаблоне.

12 голосов
/ 20 января 2010

Синтаксис (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.

8 голосов
/ 17 января 2010

По существу, статические методы позволяют писать процедурный код на объектно-ориентированном языке. Это позволяет вам вызывать методы без необходимости сначала создавать объект.

6 голосов
/ 17 января 2010

Единственный раз, когда вы хотите использовать статический метод в классе, это когда конкретный метод не требует создания экземпляра класса. Это может быть при попытке вернуть общий источник данных (например, Singleton) или выполнении операции, которая не изменяет внутреннее состояние объекта (например, String.format).

Эта запись в википедии довольно хорошо объясняет статические методы: http://en.wikipedia.org/wiki/Method_(computer_science)#Static_methods

4 голосов
/ 17 января 2010

Статические переменные и статические методы привязаны к классу, а не к экземпляру класса.

Статические методы не должны содержать «состояние». Все, что связано с состоянием, должно быть связано с созданным объектом, а не с классом.

2 голосов
/ 18 января 2010

Статические методы в PHP :

Может вызываться без создания объекта класса.

Может вызывать только статические методы и функции.

2 голосов
/ 17 января 2010

Одним из распространенных методов использования статических методов является именованный конструктор. Смотри: http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.8.

1 голос
/ 05 марта 2014

статические элементы доступны из любого контекста (т. Е. В любом месте вашего скрипта), поэтому вы можете получить доступ к этим методам без необходимости передавать экземпляр класса от объекта к объекту.

Статические элементы доступны в каждом экземпляре класса, поэтому вы можете установить значения, которые вы хотите сделать доступными для всех членов типа.

для дальнейшего чтения ссылка !

1 голос
/ 21 ноября 2012

Статическая переменная используется, когда вы хотите поделиться некоторой информацией между различными объектами класса. Поскольку переменная является общей, каждый объект может обновить ее, и обновленное значение будет доступно для всех других объектов. Поскольку статическая переменная может использоваться совместно, ее часто называют переменной класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...