2010-10-28 130 views

回答

0

它查看类路径并尝试从那里加载类以获取其定义。

+0

所以这是的**编译**和** **链接在Java中没有单独的进程? – ollydbg 2010-10-28 14:57:38

+0

@ollydbg:是的。链接发生在运行时。 – musiKk 2010-10-28 14:59:51

+0

@ollydbg:有单独的进程,但每步需要的信息之间有更多的重叠。 – 2010-10-28 15:03:46

2

当您运行Java编译器或应用程序本身,你可以指定一个类路径其中列出了所有的罐子,你是从加载类目录。一个jar只包含一堆类文件;这些文件具有足够的元数据,不需要额外的头文件。

1

jar文件中的类包含所有必需的信息(类名称,方法签名等),因此不需要头文件。

当您编译多个类时javac足够聪明,可以自动编译依赖关系,因此系统仍能正常工作。

+0

我曾经认识一个曾经去过奥克兰大学的卡梅隆·斯金纳,并且与Tramping Club的人群有过一些关系。你是Cameron Skinner吗?好奇。 :-) – 2010-10-29 03:22:56

+0

是的,那就是我:) – 2010-10-29 10:54:11

2

Java适用于classloaders。编译需要类,因为它将执行静态类型检查以确保您使用每个方法的正确签名。

编译它们之后,它们不像C/C++编译器那样链接,因此基本上每个.class文件都是独立的。当然,这意味着当你要执行它时,你将不得不提供你的程序使用的编译类。所以与C和C++如何准备可执行文件有点不同。你根本没有一个连接阶段,这是不需要的。

类加载器将通过将它们添加到JVM使用的运行库中来将它们加载。

实际上,JVM使用的许多类加载器具有不同的权限和属性,您还可以显式调用它以请求加载类。发生的情况也可能是一种“惰性”加载,其中编译的.class代码仅在需要时加载(并且如果所请求的类不在类路径中,则此加载过程可以抛出ClassNotFoundException