Спецификация языка Java - Не могу понять 'BlockStatement'

Я изучал спецификацию языка Java здесь (вместо этого я должен выпить пива), и мне любопытно, что метод может содержать. В спецификации указано, что тело метода может содержать блок

MethodBody:
    Block

, где «Блок» содержит «BlockStatements». Правило «BlockStatement» выглядит следующим образом:

BlockStatement : 
    LocalVariableDeclarationStatement
    ClassOrInterfaceDeclaration
    [Identifier :] Statement

Я могу понять «LocalVariableDeclarationStatement», которое может быть

[final] int x, y, z;

Однако я не понимаю , почему существует правило «ClassOrInterfaceDeclaration». Это правило выглядит так:

ClassOrInterfaceDeclaration: 
    ModifiersOpt (ClassDeclaration | InterfaceDeclaration)

ClassDeclaration: 
    class Identifier [extends Type] [implements TypeList] ClassBody

InterfaceDeclaration: 
    interface Identifier [extends TypeList] InterfaceBody

Что здесь происходит - Вы не можете точно объявить класс или интерфейс внутри блока? Может кто-нибудь помочь прояснить эту путаницу, пожалуйста?

Обновление : я могу определить класс в методе, но следующее не сработает:

public class Foo {
    public void doFoo() {
        interface dooJa {
            int bar();
        }
    }
}

Компилятор жалуется, говоря: «Интерфейс члена dooJa может быть определен только внутри класса или интерфейса верхнего уровня» ... какие-либо объяснения?

12
задан Joeblackdev 9 July 2011 в 20:39
поделиться