A singleton is when you only want to allow and object to be instantiated ONCE. If you need some kind of gatekeeper that everyone talks to, so that all decisions are made by one person. Note: This is probably the most over-used (and possibly mis-used) design pattern.
A static class is used when you don't need ANY objects to be created. The Math class is a classic example. I don't need an actual Math object, I just need to be able to call the methods. There is no state that needs to be saved, so no object is needed.
There are only two hard things in computer science: cache invalidation, naming things, and off-by-one errors
That looks like part of how you would implement a singleton in Java.
What do you mean by a "static class"? You cannot make a top-level class static. You can make nested classes static, which means that instances of the nested class don't have a reference to the object of the enclosing class. That, however, doesn't have anything to do with singletons.