我讀過繼承是一種「編譯時間」現象,在另一個地方,我讀過超類代碼是由類加載器加載的,我推測這是在運行時發生的。我對繼承的性質有些困惑,子類的類文件是否包含超類的實際編譯代碼,還是在運行時訪問?Java中的子類編譯
回答
因此,考慮您創建一個類,該類繼承了包含在第三方jar文件
爲了編譯你的代碼,你需要在編譯器的類路徑中有第三方jar文件。
爲了運行您的代碼,您還需要啓動應用程序的java命令的類路徑中的jar文件。
你的子類不包含超類的代碼,它在jar文件中。您編譯的類包含對超類的引用。當你的類被類加載器加載時,它會在超類的類路徑中搜索並加載它。
我認爲你的回答可能會更好地解決他的困惑,但我認爲他正在徘徊於一個既不是或者命題的想法,也不是。它是兩個。它在編譯時需要被編譯,並且在運行時需要被加載和鏈接。 – lscoughlin
@lscoughlin同意。我不認爲像編譯時或運行時這樣的語言概念。 – mikea
感謝你和@Iscoughlin,這清除了我的懷疑... @ Iscoughlin是正確的,我想知道它的一個或者是一個命題,你的評論是否能夠清除空氣。 –
你在哪裏閱讀過它的編譯時間?我猜如果你編譯你的子類,那麼是的,它需要有一個超類來編譯時參考。
但是當你真正運行是動態鏈接按代碼:
http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-5.html
「Java虛擬機動態加載,鏈接和初始化類和接口」
http://www.cs.utexas.edu/users/lavender/courses/tutorial/java-06.pdf我在第一行的PDF文件中閱讀它。這增加了我的困惑。 –
- 1. 編譯Java類
- 2. 運行編譯的Java類
- 3. 編譯Groovy類與現有的Java類?
- 4. 一起編譯Java類
- 5. java類編譯時錯誤
- 6. 反編譯java類文件
- 7. Bash編譯Java類和JAR
- 8. Java類將無法編譯
- 9. 如何在Java中編譯匿名類?
- 10. 在linux中編譯多個java類
- 11. 在java中編譯類方法
- 12. Java 8 Streams,不能編譯的例子
- 13. 的Java:編譯
- 14. 列表編譯的Java類的成員
- 15. Eclipse:使用Java類編譯AspectJ類
- 16. 的Java測試類不會編譯
- 17. Java編譯時類的解析
- 18. java限制某些類的反編譯
- 19. 獲取java類的編譯時間戳
- 20. 具有相關類的Java編譯器
- 21. eclim中的Java編譯
- 22. Java中的編譯接口
- 23. java中的隱式編譯
- 24. 在編譯文件中編譯類
- 25. 在Java 7中編譯使用Java 8類型的方法
- 26. 編譯器如何理解java 8編譯jar到Java 6編譯java類文件
- 27. 編譯Java編譯期間的錯誤
- 28. 反編譯Java類然後重新編譯?
- 29. 編譯java類協議緩衝區有編譯時錯誤
- 30. Java編譯NoClassDefFoundError
「我已閱讀。 ..「:你能提供一個參考嗎? –
http://www.cs.utexas.edu/users/lavender/courses/tutorial/java-06.pdf –
我可以看到爲什麼會增加你的困惑。正如其他答案指出的那樣,繼承在編譯時和運行時都很重要。那句話是錯的。 –