Only use nested classes when the nested class has some intimate relationship with its surrounding type. If you can say, “A Foo is part of a Bar,” then it might be a good idea to have Foo as a nested class in Bar. If you think there is a need to access Foo outside any Bar objects, then consider making it public static.
Java has "static nested classes", but they're not at all the same as C#'s static classes, if that's where you were coming from. A static nested class is just one which doesn't implicitly have a reference to an instance of the outer class. Static nested classes can have instance methods and static methods.
You showed up just in time for the waffles! And this tiny ad:
Building a Better World in your Backyard by Paul Wheaton and Shawn Klassen-Koop