2013-03-24 60 views
1

這是一個非常簡單的代碼:爲什麼簡單的代碼會加載很多類?

package test; 
public class Test { 
    public static void main(String[] args) { 
     System.out.println("test"); 
    } 
} 

我運行:JAVA -verbose:類測試,並以下爲輸出。爲什麼這麼多的類加載?根據需要不是Java加載類?

[Opened C:\Program Files\Java\jdk1.7.0_11\jre\lib\rt.jar] 
[Loaded java.lang.Object from C:\Program Files\Java\jdk1.7.0_11\jre\lib\rt.jar] 
[Loaded java.io.Serializable from C:\Program Files\Java\jdk1.7.0_11\jre\lib\rt.jar] 
[Loaded java.lang.Comparable from C:\Program Files\Java\jdk1.7.0_11\jre\lib\rt.jar] 
[Loaded java.lang.CharSequence from C:\Program Files\Java\jdk1.7.0_11\jre\lib\rt.jar] 
[Loaded java.lang.String from C:\Program Files\Java\jdk1.7.0_11\jre\lib\rt.jar] 
[Loaded java.lang.reflect.GenericDeclaration from C:\Program  Files\Java\jdk1.7.0_11\jre\lib\rt.jar] 
[Loaded java.lang.reflect.Type from C:\Program Files\Java\jdk1.7.0_11\jre\lib\rt.jar] 
[Loaded java.lang.reflect.AnnotatedElement from C:\Program Files\Java\jdk1.7.0_11\jre\lib\rt.jar] 
[Loaded java.lang.Class from C:\Program Files\Java\jdk1.7.0_11\jre\lib\rt.jar] 
[Loaded java.lang.Cloneable from C:\Program Files\Java\jdk1.7.0_11\jre\lib\rt.jar] 
[Loaded java.lang.ClassLoader from C:\Program Files\Java\jdk1.7.0_11\jre\lib\rt.jar] 
[Loaded java.lang.System from C:\Program Files\Java\jdk1.7.0_11\jre\lib\rt.jar] 
[Loaded java.lang.Throwable from C:\Program Files\Java\jdk1.7.0_11\jre\lib\rt.jar] 
[Loaded java.lang.Error from C:\Program Files\Java\jdk1.7.0_11\jre\lib\rt.jar] 
... 
test 
[Loaded java.lang.Shutdown from C:\Program Files\Java\jdk1.7.0_11\jre\lib\rt.jar] 
[Loaded java.lang.Shutdown$Lock from C:\Program Files\Java\jdk1.7.0_11\jre\lib\rt.jar] 
+1

這可能會幫助您:http://www.ibm.com/developerworks/java/library/j-dyn0429/ – Maroun 2013-03-24 19:08:47

+0

是的,此鏈接(ibm.com/developerworks/java/library/j-dyn0429)具有回答我的問題。謝謝! – user2067036 2013-03-25 05:22:43

回答

0

類本身可以以傳遞的方式加載類。您的程序使用System類,它可能自己引用像java.io.Serializable這樣的系統類。

您的列表中的類也碰巧是經常使用的類。可能只是虛擬機強制加載它們,以避免延遲初始化。這些類必然會用在任何非平凡的程序中。

0

在java中,一個類至少引用另一個類(稱爲對象)。 JVM標識這些引用(f.e. extends,返回類型,字段類型,implements)並加載引用的類。

在上面的例子:

到Java VM加載類不加載時它們

package test; 
public class Test { 
    public static void main(String[] args) { 
    System.out.println("test"); 
    } 
} 

類參閱: 系統,對象,類,字符串,從反射包中的一些類和等等。

上面列出的這些類。

相關問題