Javac 如何处理多个文件、目录、类 和源代码?
How does Javac work for multiple files, directories, classes and source?
我正在尝试弄清楚 javac 如何处理源路径、class路径和预构建的 classes 等内容。我正在尝试阅读文档,但不能真正理解它。
我试着想出了下面的一些示例案例。
如果我正在编译一个没有依赖关系的文件 onlyfile.java,它有 2 个 classes A 和 B,并且 class A 使用 class B , class B 需要在 A 之前 defined/declared 吗?还是 javac 很聪明,会多次通过或类似的事情?
root.java 在同一文件夹中的文件 file2.java 中使用另一个 class。如果我执行 javac root.java ,javac 如何知道在文件夹中搜索 class 文件,如果找不到,则搜索源文件?
如果 file2 位于子目录中,上述如何工作?
编辑:
我在某处读到,导入只是一种减少打字的方法,而不是 "loading" python 中的任何东西。
假设我只构建 1 个 java 文件,它使用多个其他 classes,并且这些 class 文件已经存在。如果没有导入,class 对象的 a.b.c.d 部分已经告诉我在哪里搜索 class 文件,那么为什么要使用 cp 选项?
对于前两个选项,请尝试 javac *.java
重复 Compiling Multiple Classes (Console) in Java
1) 如果编译使用 class B 的 class A,那么 class B 也将被强制执行。如果编译classB(A内部使用,B内部不使用A),则不会强制classA。查找更多详细信息结束示例 here.
2) javac 在源路径和 class 路径中搜索。如果你 运行 javac 没有像 javac A.java
这样的参数,它会将 classpath 和 sourcepath 设置为当前目录。如果请求的 class 在 classpath 和 sourcepath 中均未找到,您将遇到编译错误。
3) Java 对项目结构有严格的规定。您不能简单地将源文件放置到另一个文件夹而不更新文件内容。
项目中的每个文件夹都应具有与包声明相关的文件夹层次结构。
Definition: A package is a grouping of related types providing access protection and name space management.
例如,如果您有 class A.java
和这样的包声明
package com.mycompany;
对应的文件夹结构应该是这样的:
com/mycompany/A.java
如果您遵循此规则,编译器将能够像我在 #1 中解释的那样解决依赖关系。查找更多信息 here。
我正在尝试弄清楚 javac 如何处理源路径、class路径和预构建的 classes 等内容。我正在尝试阅读文档,但不能真正理解它。
我试着想出了下面的一些示例案例。
如果我正在编译一个没有依赖关系的文件 onlyfile.java,它有 2 个 classes A 和 B,并且 class A 使用 class B , class B 需要在 A 之前 defined/declared 吗?还是 javac 很聪明,会多次通过或类似的事情?
root.java 在同一文件夹中的文件 file2.java 中使用另一个 class。如果我执行 javac root.java ,javac 如何知道在文件夹中搜索 class 文件,如果找不到,则搜索源文件?
如果 file2 位于子目录中,上述如何工作?
编辑: 我在某处读到,导入只是一种减少打字的方法,而不是 "loading" python 中的任何东西。 假设我只构建 1 个 java 文件,它使用多个其他 classes,并且这些 class 文件已经存在。如果没有导入,class 对象的 a.b.c.d 部分已经告诉我在哪里搜索 class 文件,那么为什么要使用 cp 选项?
对于前两个选项,请尝试 javac *.java
重复 Compiling Multiple Classes (Console) in Java
1) 如果编译使用 class B 的 class A,那么 class B 也将被强制执行。如果编译classB(A内部使用,B内部不使用A),则不会强制classA。查找更多详细信息结束示例 here.
2) javac 在源路径和 class 路径中搜索。如果你 运行 javac 没有像 javac A.java
这样的参数,它会将 classpath 和 sourcepath 设置为当前目录。如果请求的 class 在 classpath 和 sourcepath 中均未找到,您将遇到编译错误。
3) Java 对项目结构有严格的规定。您不能简单地将源文件放置到另一个文件夹而不更新文件内容。
项目中的每个文件夹都应具有与包声明相关的文件夹层次结构。
Definition: A package is a grouping of related types providing access protection and name space management.
例如,如果您有 class A.java
和这样的包声明
package com.mycompany;
对应的文件夹结构应该是这样的:
com/mycompany/A.java
如果您遵循此规则,编译器将能够像我在 #1 中解释的那样解决依赖关系。查找更多信息 here。