Когда нужно объявлять статические методы в классах?

Не могу понять, когда метод в классе должен быть статический? До сего момента у меня все методы были не статическими, поэтому мне не понятно в каких ситуациях мне может понадобится создать статический метод.

Попытайтесь ответь на следующий вопрос: "Имеет ли смысл вызывать метод, даже если экземпляр класса еще не построен?" Если это имеет, тогда метод определенно должен быть статичным, иначе он должен принадлежать экземпляру (быть не статическим).

Также рекомендуется статические методы определять только в в следующих сценариях:

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