Ну почему к процедурному? Ничего плохого в статических методах класса как бы нет. Ведь довольно часто нет смысла создавать экземпляр объекта, когда нужно выполнить код, действительно к контексту объекта отношения не имеюшего. Т.е. довольно часто, классы используют именно для группировки набора функций и избежания конфликта имен (ведь понятно, что в масштабах большого проекта функция getProperties может встретиться не раз).
Вот к примеру они взяли и сгруппировали свои реализации строковых функций в классе JString, и понятно, что для того, чтобы вызвать strpos, весьма не рационально тратить время и память на создание экземпляра и вызова его метода. Бо с самим объектом фунция никак не связана. Да и использовать в этом случае Singleton тоже не очен уместно - на большом количестве таких объектов будет перерасход памяти. А так, и компактно, и понятно, и нет никаких конфликтов.
С другой стороны, много статических вызовов у методов, реализующих различные паттерны, типа Singleton, Fabric и им подобным.