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


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

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

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

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

спасибо

10 60

10 ответов:

ваше описание статической переменной более соответствует тому, что найдено в C. понятие статической переменной в объектно-ориентированных терминах концептуально отличается. Я рисую из опыта Java здесь. Статические методы и поля полезны, когда они концептуально не принадлежат экземпляру чего-либо.

рассмотрим математический класс, который содержит некоторые общие значения, такие как 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.

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

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

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

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

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

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

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

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

одно общее использование статических методов находится в идиоме именованного конструктора. См.: http://www.parashift.com/c++-часто задаваемые вопросы-лайт/конструкторы.сообщение: чаво-10.8.

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

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

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

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

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

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

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