Java文件中import语句的含义

22

有人能清楚地解释一下在Java文件中使用import语句时到底发生了什么吗?如果我们添加更多的Java类,它会增加文件的大小吗?为什么不使用类加载器来实现相同的效果?导入的限制有哪些?


8
Java中的import与C或C++中的include不同。 - Zaki
5个回答

49

import declarations(而非语句)本质上是源代码级别的一种简写方式:它允许您使用单个标识符(例如Listmin)来引用类型或static成员,而不是完全限定名称(例如java.util.ListMath.min)。

import声明部分是源代码的编译时元素,在运行时没有存在。在JVM字节码中,类型名称始终是完全限定的,除非您在使用编写不良的编译器,否则二进制文件应该只包含实际使用的类型名称。

类加载器用于一个完全不同的概念,与import特征毫无关系。

JLS 7.5 导入声明

导入声明允许通过单个标识符的简单名称引用static成员或命名类型。如果没有使用适当的import声明,引用另一个包中声明的类型或另一个类型的static成员的唯一方法是使用完全限定名称。

单类型导入声明通过提及其规范名称导入单个命名类型。

类型导入需求声明按需要导入命名类型或包的所有可访问类型。从未命名包导入类型是编译时错误。

单静态导入声明通过给出其规范名称导入一个类型的所有可访问的static成员。

静态导入需求声明按需要导入命名类型的所有可访问static成员。

参考文献

参见


各种与import有关的问题

关于 import 的语法角色:

关于导入所有类型和单个类型:

  • 为什么在Java的import语句中使用通配符是不好的?
  • import java.util.*;和import java.util.Date;之间有什么区别?
  • 关于import static

    与性能相关的问题:


    5

    包由类组成,而一个包内的类又由方法、变量等等组成。 一个类有一个完整名称,由包名和类名组成。如果你需要在代码中使用一个类,你需要给编译器这个类的完整名称。因此,你可以使用导入语句或者在代码中每次使用该类时输入完整限定名称。

    例如,如果你需要在代码中使用 ArrayList ,你可以使用导入语句 import java.util.ArrayList; 而不是在每个需要 ArrayList 的地方都输入完整限定类名。

    更详细信息请参见JLS


    4
    Java中的导入只是编译器的提示,不会影响二进制类文件的大小。您可以使用导入一次,也可以每次使用时写类的完整名称。
    导入只是为了可读性和开发人员的懒惰而存在。

    3

    import语句告诉编译器:如果你在这个类中找不到一个函数,请查找导入列表。

    这样,您就可以引用其他包中的函数,而无需将定义(如C(++) .h文件)复制到自己的包中。


    导入声明通常不能帮助解决方法,它们可以帮助解决类/类型。只有 import static 可以直接帮助解决方法。 - Joachim Sauer

    0
    Java中的import语句允许引用其他包中声明的类,而无需引用完整的包名。如果您愿意始终使用java.util.List的全名来引用它,以及所有其他类,那么您不需要任何导入语句。但是,如果您想将其称为List,则需要导入它,以便编译器知道您正在引用哪个List。
    来自java.lang包的类会自动导入,因此您不需要显式执行此操作,例如,要引用String。
    阅读更多:http://wiki.answers.com/Q/Why_import_statement_is_needed_in_Java_program#ixzz1zDh2ZBhE

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接