public class ShadowTest
{

    public int x = 0;

    class FirstLevel
    {
        {  // here not able to understand why it allows.

            x = 1;
        }

        void methodInFirstLevel()
        {
            System.out.println("x = " + x);
            // System.out.println("this.x = " + this.x);
            System.out.println("ShadowTest.this.x = " + ShadowTest.this.x);
        }
    }

    public static void main(String... args)
    {
        ShadowTest st = new ShadowTest();
        ShadowTest.FirstLevel fl = st.new FirstLevel();
        fl.methodInFirstLevel();
    }
}


我不清楚为什么没有括号就不起作用,括号的意义是什么?请详细说明。

最佳答案

因为当您删除括号时,它被视为声明,并且您无法再次在内部类中声明x,因为外部类具有相同名称的变量。

创建实例并执行时,在{}中允许将其视为初始化块。

关于java - 内层类(Class)观念的运作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36570066/

10-11 11:03