<p>What is the main difference between an inner class and a static nested class in Java? Does design / implementation play a role in choosing one of these?</p>

Ummm… An inner class
is
a nested class… Do you mean anonymous class and inner class?
Edit: If you actually meant inner v.s. anonymous: an inner class is just a class defined within a class, such as:
```
```
public class A {
    public class B {
    }
}
```
```
…whereas an anonymous class is an extension of a class defined anonymously, so no actual "class" is defined, as in:
```
```
public class A {
}

A anon = new A() { /* You could change behavior of A here */ };
```
```
Further edit:
Wikipedia
claims there is a difference
in Java, but I've been working with Java for eight years, and it's the first time I heard such a distinction – not to mention there are no references there to back up the claim… Bottom line, an inner class is a class defined within a class (static or not), and nested is just another term to mean the same thing.
There is a subtle difference between static and non-static nested classes… Basically, non-static inner classes have implicit access to instance fields and methods of the enclosing class (thus they cannot be constructed in a static context, it will be a compiler error). On the other hand, static nested classes don't have implicit access to instance fields and methods and
can
be constructed in a static context.