我正在 eclipse 中编写一些 Java 代码。代码包含在一个名为Adder
,在 Eclipse 中位于包中org.processing
。类文件中的第一件事是行
package org.processing
Q1) 这条线到底在做什么?为什么存在,它的作用是什么。
该代码在 Eclipse 中运行良好,但是,当我进入工作区时,如果我转到src/org/processing/
文件夹中src
,编译为javac Adder.class
当我尝试使用运行时java Adder
我收到以下错误
java.lang.NoClassDefFoundError: Adder (wrong name: org/processing/Adder)
另一方面,如果我使用 src 进行编译
javac org/processing/Adder.java
我可以运行它src
using java org.processing.Adder
但仍然不是来自处理目录。
Q2) 这是否意味着编译始终与目录结构相关?
最后,如果我删除package org.processing
从一开始的行是.class
我可以从以下文件中编译并运行.class
文件的目录。
Q3) 为什么会变成这样?我可以完全理解为代码开发强制执行目录结构,但是一旦您使用字节码,这似乎有点过头了,因为现在我(显然)只能从一个导演运行字节码(src
) using java org.processing.Adder
。现在,我确信我错过了重点,所以如果有人能指出它是什么,那就太好了。
编译器在编译时必须能够找到相关的源代码文件。这就是为什么源代码的包和目录结构必须一致。同样,JVM 必须能够找到引用的 .class 文件。所以运行时需要相同的目录结构。没有比这更复杂的了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)