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不能用于定义类?
(添加第二个答案,因为我的错误答案已经有三个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)
我不能说我以前做过这件事,我也不能想象自己想要很快做到这一点.请注意,这是一个本地类,它始终隐式地是一个内部类.(虽然如果你在静态方法中声明一个本地类,那么就没有封闭的实例,只是为了使这个术语有点奇怪......)
如果要创建一个类,初始化程序块之外的代码可以"看到",则需要在初始化程序块之外声明它.(就像任何其他声明一样 - 如果你在初始化程序块中声明了一个变量,你不会期望能在外面看到它吗?)