Здесь много хороших ответов, и они намного более проницательны и хорошо осведомлены, чем все, что я когда-либо мог придумать в качестве ответа, но я чувствую, что есть кое-что, на что не обращают внимания:
«Наш архитектор решил, что мы используем все статические методы для всех API. Его аргументы в пользу того, что статические методы легки и полезны для веб-приложений, снижают нагрузку на сервер ».
(жирный акцент мой)
Мой 2с по этой части вопроса таков:
Теоретически, то, что сказано, верно: вызов статического метода имеет только накладные расходы на фактический вызов этого метода. Вызов нестатического (экземпляра) метода имеет дополнительные издержки, связанные с первым созданием экземпляра объекта и, в какой-то момент, уничтожением экземпляра (либо вручную, либо с помощью некоторой формы автоматического сбора мусора, в зависимости от используемой платформы).
Спектакль немного отстаивает дьявола на этом: мы можем пойти еще дальше и сказать такие вещи, как:
это может стать очень плохим, если экземпляр создается для каждого вызова метода (экземпляра) (в отличие от просто оставления статического состояния и вызова его таким образом)
в зависимости от сложности конструктора, иерархии типов, других членов экземпляра и других подобных неизвестных факторов дополнительные издержки при вызове нестатического метода могут варьироваться и становиться действительно большими
По правде говоря, ИМХО, вышеупомянутые пункты (и общий подход «давайте использовать статику, потому что они быстрее») являются аргументами / оценками соломенного человека:
если код хороший и, более конкретно, для этого аргумента, если экземпляры создаются только при необходимости (и уничтожаются оптимальным образом), то вы не получаете никаких дополнительных затрат от использования методов insance, когда это уместно (потому что если вы создавать только необходимые объекты, они были бы созданы, даже если бы этот метод был объявлен как static, где else = те же самые издержки инстанцирования)
злоупотребляя объявлением статических методов таким образом, можно скрыть некоторые проблемы с вашим кодом в отношении того, как создаются экземпляры (поскольку метод является статическим, неправильный код экземпляра может пройти незамеченным до позднего времени, и это никогда не бывает хорошо).