Javac如何处理多个文件,目录,类和源?

时间:2017-04-02 22:44:38

标签: java compilation javac

我正在试图弄清楚javac如何处理sourcepath,classpath和prebuilt类等等。我正在尝试阅读文档,但无法理解它。

我试过考虑下面的一些示例案例。

  1. 如果我正在编译一个没有依赖关系的文件onlyfile.java,它有两个A和B类,而A类使用B类,那么是否需要在A之前定义/声明B类?或者是javac聪明并且做多次传递或类似的东西?

  2. root.java使用位于同一文件夹中的文件file2.java中的另一个类。如果我执行javac root.java,javac如何知道在文件夹中搜索类文件,如果没有找到,那么对于源文件呢?

  3. 如果file2位于子目录中,上述工作原理如何?

  4. 编辑: 我在某处读到,导入只是一种减少打字的方法,而不是“加载”像python中的任何东西。 假设我只构建了一个使用多个其他类的java文件,并且这些类文件已经存在。没有导入,类对象的a.b.c.d部分已经告诉我在哪里搜索类文件,那为什么是cp选项?

2 个答案:

答案 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

重复Compiling Multiple Classes (Console) in Java