If I have something that I'll only one a single instance of in a JVM:
1. If it maintains state, singleton. Otherwise, static.
This is a good rule. I used singletons for a quite large C++ project some time ago and we used practically the same rule and it went well. :-)
Whenever a (single instanced) class has got some kind of states, so that the order of
when it is beeing created could matter, a singleton is much safer than a static only class.
For a "function"-like class (like Math.sin() etc) pure static classes makes perfect sense. :-)