我读过继承是一种“编译时间”现象,在另一个地方,我读过超类代码是由类加载器加载的,我推测这是在运行时发生的。我对继承的性质有些困惑,子类的类文件是否包含超类的实际编译代码,还是在运行时访问?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 –
我可以看到为什么会增加你的困惑。正如其他答案指出的那样,继承在编译时和运行时都很重要。那句话是错的。 –