Оба способа работают и имеют свои варианты использования.
Ваш первый случай - это обычный вызов функции с использованием экземпляра класса, а второй - вызов статической функции.
Static следует использовать с осторожностью, и его использование очень часто является признаком необходимости рефакторинга / редизайна.
Смысл объектно-ориентированного программирования состоит в том, чтобы моделировать мир путем написания классов (чертежей), а затем создавать столько независимых экземпляров этого класса со словом «новый», сколько необходимо. Каждый экземпляр - это маленький организм с ДНК класса, и вы можете вызывать один и тот же метод класса в каждом отдельном случае, не влияя на другие экземпляры.
Статический вызов, однако, не связан с экземпляром класса, и поэтому не используется ни один объект. Это глобальный вызов функциональности некоторых инструментов, который фактически разрушает идею инкапсуляции.
Итак, я не говорю, что для статических классов и методов нет вариантов использования, но их следует использовать с осторожностью.