Howard- inner classes didn't exist when the JLS was first written, and their supposed official definition is in the
inner classes specification, which unfortunately is a poorly-organized piece of crap and doen't seem to answer your question. Fortunately, Sun is in the process of creating a second edition of the JLS; you can see the draft edition
here. Unfortunately it's only available as one big PDF file at the moment, but that will eventually change. It contains much clearer rules for inner classes, including: "The scope of a local class declared in a block is the rest of the immediately enclosing block, including its own class declaration". (Section 14.3) "The rest" means it's in scope
after the declaration, but not before. It's analogous to a local variable - you have to declare it before you can use it. Clear?