为什么不能在Java中创建本地类的实例?

Xel*_*ian 1 java field class local-class

如果我有这个代码.

public class Test{
        {
            class People {

            }
        }

        public static void main(String[] args) {
            People person = new People();//Compile ERROR
        }

    }
Run Code Online (Sandbox Code Playgroud)

我无法创建People的实例.

这是否意味着Initializer Block不能用于定义类?

Jon*_*eet 6

(添加第二个答案,因为我的错误答案已经有三个upvotes.)

可以在初始化程序块中声明一个类 - 但它的作用域是初始化程序块,就像您在方法中声明它一样.这样可行:

public class Test {
    {
        class People {            
        }

        People people = new People();
        System.out.println("In initializer block!");
    }

    public static void main(String[] args) {
        new Test();
    }
}
Run Code Online (Sandbox Code Playgroud)

我不能说我以前做过这件事,我也不能想象自己想要很快做到这一点.请注意,这是一个本地类,它始终隐式地是一个内部类.(虽然如果你在静态方法中声明一个本地类,那么就没有封闭的实例,只是为了使这个术语有点奇怪......)

如果要创建一个类,初始化程序块之外的代码可以"看到",则需要在初始化程序块之外声明它.(就像任何其他声明一样 - 如果你在初始化程序块中声明了一个变量,你不会期望能在外面看到它吗?)