Методы класса vs методы экземпляра
Hi методы класса обычно измеряются быстрее, чем методы экземпляра, поскольку для этого не требуется загрузка экземпляра? Если так, мы должны использовать методы класса? Спасибо
9 ответов
Я не знаю о целом, но я помню измерение для некоторого приложения некоторое время назад, и статические методы были действительно быстрее.
с точки зрения дизайна я бы сказал, что любой метод, который может быть разумно статическим (то есть без явной передачи экземпляра в качестве параметра или чего-то подобного), должен быть.
независимо от того, что быстрее и сколько, есть одно важное отличие, которое вам нужно помнить:
- нельзя
@Override
статический метод!
Это очень важно, потому что вы по существу говорите, что вы не будете, и не может использовать одно из главных преимуществ в Java, а именно переопределение методов в суб-классифицировать объекты. Когда вы вызываете статический метод, вы остаетесь с этим статическим методом и не можете переопределить его в подклассе объекты.
также решить "что быстрее", а затем построить реальные
Если метод не требует экземпляра, IMO это должен быть метод класса. И поскольку метод класса возможен только в том случае, если вы не используете экземпляр, тогда ваш вопрос
должны ли мы использовать методы класса, когда возможно
имеет положительный ответ.
но определенно не по причинам эффективности
нет, они не быстрее.
однако рекомендуется использовать методы класса, когда это возможно, потому что, таким образом, вы указываете, что логика внутри метода не требует доступа к переменным-членам.
Я говорю - Не используйте методы экземпляра, которые могут быть статическими.
" метод класса "доступен для каждого экземпляра класса и" методы экземпляра " juste для текущего экземпляра. Поэтому я не понимаю, почему метод класса будет быстрее, когда она применяется ко всем intances ...
пожалуйста, посмотрите на ссылку
http://www.leepoint.net/notes-java/flow/methods/50static-methods.html
хотя методы класса могут быть быстрее, вы определенно не должны писать код с таким образом мышления. Вы должны использовать метод класса, когда вам это нужно. Хорошим примером являются служебные классы, такие как Arrays. Фабрики, которые возвращают синглтон. Никогда не используйте их, когда вам требуется доступ к внутренностям класса.
при сравнении методов класса и методов экземпляра попробуйте представить методы экземпляра как методы класса с дополнительным параметром this
(фактически, теперь некоторые языки реализуют методы экземпляра)
таким образом, возникает вопрос: "будет ли мой метод быстрее, если он имеет один параметр меньше?"и этот вопрос действительно не имеет смысла, потому что список параметров в значительной степени не имеет отношения к производительности.
попробуйте принимайте решение о том, является ли метод должен быть статичным или экземпляр по характеру метода и по данным, которые он требует, а не по какому-то преждевременному преимуществу производительности. Да, производительность-это функция, но это не единственная функция.
последнее эмпирическое правило производительности: мера, мера, мера. Просто потому, что в какой-то книге или статье говорится, что что-то должно быть быстрее, не означает, что это сработает для вас. Попробуйте это на вашем реальном случае и подкрепите его эмпирическими данными.
из моего опыта, если вам нужно инициализировать объект и сохранить его каким-либо образом, например, с помощью массива и т. д. Лучше всего вызвать метод экземпляра в этом конкретном экземпляре.
Нет смысла вызывать метод класса, а затем передавать тот же экземпляр, который вы только что инициализировали в качестве аргумента этому методу класса.
Я не уверен в эффекте во время выполнения, но это кажется пустой тратой (номинальной или нет).
Я в основном использую методы класса для операций, которые не должны будьте инициализированы, когда смогу. Например, мой класс MathFunctions содержит все мои геттеры для моих тригонометрических методов. Нет смысла инициализировать и создавать объект MathFunctions, чтобы затем вызвать метод экземпляра просто для получения произвольного результата от одного из этих методов. Его проще (и быстрее) просто вызвать метод class.
поэтому в любом случае нет "метода класса > метода экземпляра" или наоборот. Это просто зависит от вашего приложения и того, что вам нужно.
Использовать здравый смысл прежде всего, если вы обнаружите, что инициализируете объекты для классов, содержащих минимальные данные (например, MathFunctions), вам, вероятно, лучше использовать метод класса.
Но с другой стороны, если вы обнаружите, что инициализируете объекты, а затем передаете их в методы класса в качестве аргументов, вам, скорее всего, будет лучше с методом экземпляра.
Это мои два цента, я все еще относительно новичок в программировании, так что имейте это в виду.