加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java是源文件或二进制文件的导入关键字吗?

发布时间:2020-12-15 04:48:52 所属栏目:Java 来源:网络整理
导读:我知道我可以使用import语句在我的 Java项目中包含一个类或一组类. 例如,导入java.io.utils.* import(即可在我的Java程序中使用)java.io.utils包中的所有类. 我的问题是,是否需要编译导入包中的类?或者包也可以包含未编译的Java文件?如果它可以是,我们何时
我知道我可以使用import语句在我的 Java项目中包含一个类或一组类.

例如,导入java.io.utils.* import(即可在我的Java程序中使用)java.io.utils包中的所有类.

我的问题是,是否需要编译导入包中的类?或者包也可以包含未编译的Java文件?如果它可以是,我们何时可以使用类文件,何时可以使用Java文件?

解决方法

导入只是意味着“通过简单名称使导入的类可用” – 如果在任何地方使用完全限定名称,则可以完全删除导入.例如,它绝对不像C中的#include.

当你编译时,如果你试图引用未编译的代码,它将在那时被编译,假设编译器可以猜测在哪里找到源代码.结果从不引用未编译的代码,因为编译器需要知道每种类型公开的内容.

作为完整示例,构造以下文件结构:

// src/foo/A.java
package foo;
import bar.*;

public class A {
    public static void main(String[] args) {
        B.sayHello();
    }
}

// src/bar/B.java
package bar;
public class B {
    public static void sayHello() {
        System.out.println("Hello");
    }
}

然后在src目录中运行:

javac foo/A.java

这将自动编译bar / B.java – 但不会编译任何其他未引用的代码(可能是传递的).

我强烈建议不要使用这种“按需编译”行为 – 如果你编译依赖于B类的A类,它将在第一次编译B,但之后如果你改变B并重新编译A,则编译器赢了’重新编译B.我会将您的代码组织到适当的项目中,并始终一次重新编译一个完整的项目,将项目的输出目录添加到依赖于它的项目的类路径中,而不是允许编译一个项目来重新编译另一个项目的位一经请求.

(请注意,这并不是说许多IDE支持的渐进式编译……这是一个相当不同的问题,假设它已经正确实现,这很好.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读