学习C语言的时候,程序从源代码到可执行文件需要两步,编译,连接。编译个人理解是对源代码的第一步简化,也就是第一步像二进制代码靠近,刚开始我考虑着,为什么不直接把文件编译成二进制代码,非要在中间加个链接的过程。后来明白了,这是为了多个文件,或者不同时段写的文件,也能够被组织成一个可执行文件。最初的编译虽然不能执行,但是他已经对源文件进行了相当大部分的处理。而且仍然保留了成设计时的一些必要信息。以便于后期其他的连接操作。
而对于java 没有连接过程只有编译过程。而且java最后编译的 class文件确实也包含着关于里面代码段的一些信息。反过来想,虚拟机在在执行代码的时候,代码中是不应该包含那些 关于 代码中 方法或者变量的相关信息的数据的,因为这些是不能执行的,虚拟机能够执行的最终文件应该只有代码和要存取的内存单元的地址。 后来学到反射的时候,需要由 class文件 new 一个对象出来,所谓的这个new 是不是 就完成了程序的连接 部分? |