Singletons objects made so there can only be 1 instance at any given time and can be used application wide.
Objects that handle stuff like connection pools are a good candidate to be Singletons;
- You only want 1 instance in the entire application
- you must be able to access it from different parts of the application
- the data it holds has to be persisted even when no other objects are currently pointing to it (handy when you want to reuse objects that are expensive to initialize).
A class filled with only static methods is not something that's usually meant to be initialized like an object. It's more like a wrapper for the static methods in it.
An example of this that I use frequently is a utility class with methods that do repetitive tasks that take parameters, does a calculation with them/formats them/etc. and then returns the result, without using any external (or at least no non-static) fields or methods.
I never initialize a utility class, I just use the static methods in it for all repetitive methods.
This is just how I tend to use Singletons and static (method filled) classes, not sure if it confirms to any "official" standards...