2017-04-02 110 views
0

我试图弄清楚javac如何处理像sourcepath,classpath和预建类等东西。我试图阅读文档,但不能真正理解它。Javac如何为多个文件,目录,类和源创建工作?

我试过想下面的一些示例。

  1. 如果我编译onlyfile.java它没有依赖关系,有2类A和B,A类使用B类,也被定义B类需要一个单一的文件/ A之前声明?或者是javac聪明,做多次通行证或类似的东西?

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

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

编辑: 我读的地方,进口只是为了减少输入,而不是像蟒蛇“加载”任何一种方式。 假设我只构建了一个使用多个其他类的java文件,并且这些类文件已经存在。如果没有导入,类对象的a.b.c.d部分已经告诉我在哪里搜索类文件,那么为什么使用cp选项?

+0

对于#1,为什么不自己尝试一下,看看? – Andreas

+0

@Andreas,我没有在我的系统上安装java,我只是想了解它是如何工作的,来自C++背景 –

+0

然后我认为你应该在你的系统上设置Java。没有比*动手更好的学习工具*。 – Andreas

回答

0

1)如果你编译类A,它使用B类再B类将被迫为好。如果编译B类(在A中使用,但A在B中不使用),则不会强制A类。查找更多详细信息结束示例here

2)javac在source-path和class-path内搜索。如果运行没有像javac A.java这样的参数的javac,它将classpath和sourcepath设置为当前目录。如果请求的类在类路径和源路径中均未找到,则会出现编译错误。

3)Java对项目结构有严格的规定。您不能简单地将源文件放在另一个文件夹中而不更新文件内容。

项目中的每个文件夹都应该具有与包声明相关的文件夹层次结构。

定义:包是提供访问保护和名称空间管理的一组相关类型。

例如,如果你有这样的

package com.mycompany; 

包报关类A.java相应的文件夹结构应该是这样的:

com/mycompany/A.java 

如果按照这个规则,编译器将能就像我在#1中解释的那样解决依赖关系。查找更多信息here