Javac如何处理多个文件、目录、类和源代码?[英] How does Javac work for multiple files, directories, classes and source?

问题描述

我正在尝试弄清楚 javac 在源路径、类路径和预构建类等方面的工作原理.我正在尝试阅读文档,但无法真正理解它.

我试着想出下面的一些示例.

  1. 如果我正在编译单个文件 onlyfile.java 没有依赖关系,它有 2 个类 A 和 B ,并且类 A 使用类 B ,是否需要在 A 之前定义/声明类 B ?还是 javac 很聪明并且可以多次通过或类似的东西?

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

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

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

推荐答案

1) 如果你编译的class A 使用class B 那么class B 也会被强制执行.如果你编译B类(A里面使用,B里面没有A),A类不会被强制.在这里找到更多详细信息.

2) javac 在源路径和类路径中搜索.如果你运行 javac 而没有像 javac A.java 这样的参数,它会将类路径和源路径设置为当前目录.如果在类路径和源路径中都找不到请求的类,则会出现编译错误.

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

项目中的每个文件夹都应该有关于包声明的文件夹层次结构.

<块引用>

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

例如,如果您的类 A.java 具有这样的包声明

package com.mycompany;

对应的文件夹结构应该是这样的:

com/mycompany/A.java

如果您遵循此规则,编译器将能够解决依赖关系,就像我在 #1 中解释的那样.在这里找到更多信息.

本文地址:https://www.itbaoku.cn/post/978559.html