2011-09-27 44 views
-6

嗨我在學習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(); 
    } 
} 
+0

這可能有助於http://download.oracle.com/javase/tutorial/java/javaOO/nested.html –

+1

它不編譯 – OscarRyz

+0

它編譯如果你這樣做:Hello.BC c = new Hello.BC( ); –

回答

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%?

+0

對不起,只是爲了更正 - 我使用的是JDK 1.7.0: – kiluyar

+0

對不起,只是爲了更正 - 我使用JDK 1.7.0。我不知道發生了什麼......但是在下載JDK 1.6.27並安裝它之後,我的代碼在兩個版本中都無法通過編譯:( – kiluyar