【问题标题】:what is the need for importing libraries multiple times多次导入库需要什么
【发布时间】:2011-09-09 03:13:20
【问题描述】:

在大多数代码示例中,我看到人们这样做。

import javax.swing.*; // for the frame
import java.awt.*; // for the checkBox and the label
import java.awt.event.*; // for the checkBox listener

如果我说 import java.awt.* 是正确的,它会导入其中的所有内容,所以不需要说 import java.awt.event.*;还是有速度提升?谁能解释导入库的作用,是导入要包含在源代码中的简单文本类还是告诉jvm包含导入的字节码?所以在java中导入只是切换命名空间,所以我不必输入长类名?

【问题讨论】:

    标签: java compiler-construction import package


    【解决方案1】:

    忘记subpackage这个词。快点做。它在java世界中不存在。

    java.awt 是一个包(命名空间),java.awt.event 是另一个包,它们没有任何共同之处。他们的名字有一些共同点,但包完全不相关。 import 语句从一个包(命名空间)中导入一个类或一些类。如果您需要来自不同包(命名空间)的类,则必须添加另一个导入语句。


    顺便说一句,回应对另一个答案的评论:您不必使用 import 语句。如果你不使用它们,你只需要在你的java源文件中使用完全限定的类名(除了:来自java.lang的类和当前包是自动导入的)。所以import可以被认为是保持代码可读性的一种便捷方式。

    为了在源文件中使用类,不需要导入

    【讨论】:

    • 所以在java中导入只是切换命名空间,所以我不必输入长类名?
    • 这不是 切换 命名空间。如果你写import java.util.*;,你可以写List<Integer> list = null;,否则你必须写java.util.List<Integer> list = null;。两个语句是等价的并且编译成相同的字节码。
    • @dave 它不是 切换 命名空间。它正在打开命名空间。
    • 当前包中的类也会自动导入。
    【解决方案2】:

    线...

    import java.awt.*;
    

    ...并不意味着所有的子包也会被导入。您必须显式导入每个包。例如,导入 java.* 并不会为您提供整个 java 库。

    对于它的价值,我建议只导入特定的类,除非你有充分的理由使用 *.

    【讨论】:

    • 请避免使用子包这个词。 Java 包没有任何层次结构。
    • 确实 - 糟糕的术语。因为它们是基于文件系统的,所以我放了一个“子文件夹”字样。
    • 又不正确了——标准的 Classloader 要求 *.class 文件位于文件系统中映射到包名的位置。但这只是一种方式,其他类加载器可以实现不同的算法来查找类文件 - 考虑从数据库加载类文件的类加载器:不会有文件和文件夹。但是包名可能是某些 CLASS 表中的主键。
    • 欢迎您 - 当我们学习 Java 时,我们被告知要根据包名存储类,否则应用程序将无法编译。后来我们看到,这不是全部真相;)
    【解决方案3】:

    导入包不会导入其子包。

    导入也是关于切换命名空间。

    如果您只有 import java.awt.* 并且要使用类 java.awt.Outer.Inner,那么在代码中的任何地方都必须将其称为 Outer.Inner

    相比之下,当您说import java.awt.Outer.* 时,您可以将内部类称为Inner

    【讨论】:

    • 所以在java中导入只是切换命名空间,所以我不必输入长类名?
    • 请避免使用术语子包。 Java 包没有任何层次结构。
    【解决方案4】:

    导入只是一个编译时特性,在字节码中你只会发现对特定类的直接引用,每次使用它的实例时。 “导入”结构的存在只是为了消除每次都使用完整的类名。

    【讨论】:

    • 简单说明一下:请不要混淆 classinstance 的概念。我会说:“[...],每次使用时。”。
    猜你喜欢
    • 2017-11-08
    • 1970-01-01
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    相关资源
    最近更新 更多