Nested classes come in two flavors: static and non-static or inner classes. I understand that instances of an inner class can see the members of it's class's owner, even when they're private. But apart from this practicality, what is the difference between the two flavors? For example, what is the difference on lower code-levels? And, how should I choose between a static or an inner class when both are possible?