0
A
回答
1
的Java Language Specification, §12.3說(我的重點):
本規範允許實現靈活性的活動聯繫起來時(,而且由於遞歸的,裝載)發生,但語言的語義在一個類或接口被初始化之前被完全驗證和準備,並且在鏈接期間檢測到的錯誤被拋出到程序中的某個點,在該點處程序採取了一些行動,可能需要與所涉及的類或接口相關聯在錯誤中。
例如,一個實現可能會選擇分別解析每個類或接口中的每個符號引用,僅當它被使用時(懶惰或解析晚),或者在正在驗證類時靜態解析它們(靜態解析度)。這意味着解析過程可能會繼續,在一些實現中,類或接口已經初始化之後。
現在,規範說,一個JVM 可以做一系列的事情,但很明顯,任何給定的JVM 不做一個特別的事情。 Marko的答案是,「即使在方法開始執行之前,類路徑中的所有類文件都可能被加載」,他是對的,但事實是沒有JVM實際上這樣做。
我相信在Sun JVM中實際發生的事情是儘可能晚地加載。每當一個類被初始化時,那麼它引用的任何類都需要被加載和驗證,但是它們不需要被初始化直到它們自己被實際使用。我明白這不是一個非常詳細或權威的答案。
0
我很確定它發生在編譯時。如果不符合所有要求和依賴關係,您將無法獲得代碼的編譯版本。
在編譯的Jar的情況下,我已經準備了兩個類:
public class Test {
public static void main(String[] args) {
System.out.println("T1: Hello world");
Test2.greet();
}
}
和:
public class Test2 {
public static void greet() {
System.out.println("T2: Hello world");
}
}
運行的出口項目的第一次嘗試:
$ java -jar test.jar
T1: Hello world
T2: Hello world
然後,從我的jar文件中刪除Test2.class,然後再次運行它:
$ java -jar test-mod.jar
T1: Hello world
Exception in thread "main" java.lang.NoClassDefFoundError: Test2
at Test.main(Test.java:6)
Caused by: java.lang.ClassNotFoundException: Test2
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 1 more
T1測試通過,然後出現NoClassDefFoundError異常。所以,回答你的問題:依賴關係將在運行時檢查。
3
恰好當一個.class文件將被加載沒有指定。對於你所知道的,甚至在main
方法開始執行之前,類路徑中的所有類文件都可以被加載。
Java指定的唯一事情是當一個類將被初始化爲,這與加載它完全不同。
相關問題
- 1. 查找列依賴關係
- 2. 查找AAR依賴關係
- 3. 查找makefile依賴關係
- 4. 在JAR中查找依賴關係
- 5. 在sql數據庫中查找表之間的依賴關係
- 6. 在我的項目中查找命名空間依賴關係的工具?
- 7. java依賴關係分析工具
- 8. 結構圖 - 具有依賴關係的安裝依賴關係
- 9. 我如何找到Java依賴關係?
- 10. 依賴關係的nuget依賴關係
- 11. 查找Maven依賴項對象的依賴關係
- 12. 編譯時間與運行時間依賴關係 - Java
- 13. 類依賴關係工具
- 14. 按類名查找pom依賴關係
- 15. 查找DISTINCT缺少SQL依賴關係
- 16. Maven:查找非託管依賴關係
- 17. 實體依賴關係Symfony2
- 18. 用於查找Dll依賴關係的命令行工具
- 19. java語言工具庫,無法找到依賴關係
- 20. 控制依賴關係樹邏輯 - 查找循環依賴關係
- 21. Java Maven Jar依賴關係
- 22. java maven rebuild依賴關係
- 23. Java System.loadLibrary依賴關係
- 24. Java - 如何查找類和其他級別的依賴關係
- 25. 連接依賴關係時的循環依賴關係
- 26. java中對象的依賴關係
- 27. Pig UDF中的Java依賴關係
- 28. Makefile依賴關係中的空間
- 29. 在c中查找類的依賴關係#
- 30. 如何查找java類依賴關係樹
顯然,這不是我的答案!它需要編譯時的所有依賴,但我正在談論運行時。考慮一個Jar文件的「複製版本」。 – MBZ 2012-08-11 10:02:00
好吧,我認爲這聽起來很簡單;)我會很快添加新的答案。 – 2012-08-11 10:08:56
在那裏,我希望它能解決它。 – 2012-08-11 10:20:16