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

StackOverflow https://stackoverflow.com/questions/2080150

Вопрос

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

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

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

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

Спасибо

Это было полезно?

Решение

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

Другие советы

Статические методы не передают указатель «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.

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

Единственный случай, когда вы хотите использовать статический метод в классе, — это когда данный метод не требует создания экземпляра класса.Это может произойти при попытке вернуть общий источник данных (например, 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.

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top