Creio que não haja a necessidade de alguem saber o que é o singleton, quando se começa a programar em java. Mais para a frente pode ficar essencial, assim como multiton e factories.
Quando você tem uma classe só com métodos estáticos você perde OO, é por causa do seguinte:
Você não pode instaciar essas classes porque normalmente o construtor delas é privado. Você não pode usar polimorfismo com elas porque, ou você não tem como criar instâncias delas, ou elas derivam diretamente de Object e são final. Com isso, você já não mexe mais com objetos, mas sim com procedimentos: taí a conclusão, a programação vira procedural!!!
Dois casos clássicos são a java.lang.System e Math. Só tem atributos e métodos estáticos, com isso, você nunca poderá passar uma instância da Math como parâmetro. Faz de conta que existe a matemática normal e a booleana, e você quer decidir qual usar em runtime, com este “approach”, de apenas métodos estáticos, você teria de usar reflection para mudar a classe escolhida: péssima escolha.
Existem casos que é legal você definir a classe a ser usada como argumento, mas na maior parte dos casos é interessante você mandar uma instância.
Creio que eu embaralhei você mais ainda, vou escrever algo sobre Singleton logo logo…