为什么Java允许使用内部类这样奇怪的代码来传递编译?

时间:2011-09-27 04:50:14

标签: java

您好,我在学习Java内部类时尝试了下面的代码。令人惊讶的是它通过了编译,但无法在运行时工作。我的理解是对于内部类,它必须在顶级类的实例中实例化。

但是为什么JDK编译器允许这样的代码通过编译?我使用的是JDK 6.

public class Hello
{
    public Hello()
    {
        System.out.println("Simple Hello!");
    }
    public void test() 
    {
        Test.test();
    }
    protected int i = 0;
    static class B 
    {
        public B() 
        {
            System.out.println("B Hello!");
        }
        static class C 
        {
            public C()
            {
                System.out.println("C Hello!");
            }
        }
    }
}
class Test 
{
    static void test()
    {
        C c = new C();
    }
}

1 个答案:

答案 0 :(得分:2)

这是我得到的:

$ javac -version
javac 1.6.0_26
$ javac Hello.java
Hello.java:31: cannot find symbol
symbol  : class C
location: class Test
        C c = new C();
        ^
Hello.java:31: cannot find symbol
symbol  : class C
location: class Test
        C c = new C();
                  ^
2 errors

您是否100%确定能够编译该代码?