我正在试图弄清楚javac如何处理sourcepath,classpath和prebuilt类等等。我正在尝试阅读文档,但无法理解它。
我试过考虑下面的一些示例案例。
如果我正在编译一个没有依赖关系的文件onlyfile.java,它有两个A和B类,而A类使用B类,那么是否需要在A之前定义/声明B类?或者是javac聪明并且做多次传递或类似的东西?
root.java使用位于同一文件夹中的文件file2.java中的另一个类。如果我执行javac root.java,javac如何知道在文件夹中搜索类文件,如果没有找到,那么对于源文件呢?
如果file2位于子目录中,上述工作原理如何?
编辑: 我在某处读到,导入只是一种减少打字的方法,而不是“加载”像python中的任何东西。 假设我只构建了一个使用多个其他类的java文件,并且这些类文件已经存在。没有导入,类对象的a.b.c.d部分已经告诉我在哪里搜索类文件,那为什么是cp选项?
答案 0 :(得分:0)
1)如果编译使用B类的A类,那么B类也将被强制使用。如果编译B类(在A中使用,但在B中不使用A),则不会强制使用A类。查看更多详细信息结束示例here。
2)javac在source-path和class-path中搜索。如果你运行没有像javac A.java
这样的参数的javac,它会将classpath和sourcepath设置为当前目录。如果在类路径或源路径中都找不到请求的类,则会出现编译错误。
3)Java对项目结构有严格的规定。您无法简单地将源文件放在另一个文件夹中而无需更新文件内容。
项目中的每个文件夹都应具有包声明的文件夹层次结构。
定义:包是一组提供访问保护和名称空间管理的相关类型。
例如,如果您的类A.java
包含此类
package com.mycompany;
相应的文件夹结构应如下所示:
com/mycompany/A.java
如果您遵循此规则,编译器将能够解决依赖关系,就像我在#1中解释的那样。查找更多信息here。
答案 1 :(得分:-1)
对于前两个选项,请尝试使用javac * .java