Зачем вообще нужны не statiс методы

Я понимаю, что статический метод или переменная относится к классу, а не объекту. Понятно как использовать переменную, например для подсчёта количества объектов. Но методы - то? Они у меня в 99% статические. Видимо я не понимаю.

Вот пример: Есть метод, который проверяет существует-ли объект в базе данных, или тот который записывает в базу данных Я как статическими их могу сделать, так и нестатическими, работают одинаково. В чём смысл делать их не статическими? Чтобы писать лишний код, создавать объект, а потом у объекта вызывать метод?

И таких методов у меня 100% - те, которые статика. Я вообще не могу даже придумать метод, который будет нестатичным.

Объясните пожалуйста, зачем вообще придумали нестатические методы, буду признателен за примеры не static методов из реальной жизни.


Ответы (3 шт):

Автор решения: Black_Baroness

Это основы ООП, а именно объекты. Самый простой пример - POJO. Создавая 10 разных объектов, я не могу вызвать статику, так как данные разнятся от объекта к объекту.

Более чёткий пример: в зависимости от выбора пользователя, мы создаём обьект Database. Сам Database это просто интерфейс (или абстрактный класс), пользователь выбирает MySQL или PostgreSQL.

В коде мы не будем прописывать решения для каждой базы данных. Код будет выглядеть примерно так:

Database database = new MySQL();
database.getObject("object name");

Статические методы не позволяют такое. Лично я использую статические методы только в util классах.

Если вы не углубляетесь в ООП структуру вашего проекта, статические методы и вправду могут показаться удобнее. Но, в целом, у них просто разные назначения.

В вашем примере с базой данных можно использовать Singleton.

→ Ссылка
Автор решения: Sergey Zh.

Сейчас вы пишите программы в процедурном стиле. И в общем, это допустимо.

Но вопрос задан с меткой java. А java - это объектно-ориентированный язык. Соответственно используется ООП парадигма.

По сути - это разный уровень абстракции, подходящий для разных задач. У ООП круг решаемых задач шире, но процедурый подход иногда используется в математических вычислениях, хоть поддерживать и расширять функциональность с таким подходом сложнее.

Подробнее про оба подхода:

https://stackoverflow.com/questions/60116769/what-is-the-difference-between-object-oriented-programming-and-procedural-progra

→ Ссылка
Автор решения: Roman C

Вот здесь указана причина почему нужны нестатические методы:

Статические методы класса не могут напрямую обращаться к переменным экземпляра или методам экземпляра - они должны использовать ссылку на объект. Кроме того, методы класса не могут использовать ключевое слово this, поскольку нет экземпляра, на который можно было бы ссылаться.

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

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

Таким образом можно отличить один объект от другого, даже если они созданы из одного класса.

Кроме того для статических методов не возможно использовать полиморфизм.

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

При многопоточности статические методы необходимо синхронизировать, потому что они нарушают принцип потоко-безопасности.

В качестве примера можно рассмотреть класс java.lang.Object, у него нет статических методов.

→ Ссылка