任何人都能清楚地向我解释当我们在Java文件中使用import语句时到底发生了什么?如果我们添加越来越多的java类,它会增加文件的大小吗?为什么我们不使用类加载器呢?导入的限制是什么?
答案 0 :(得分:42)
import
声明(不是语句)本质上是源代码级别的简写启用程序:它允许您引用类型或{ {1}}成员使用单个标识符(例如static
,List
)而非完全限定名称(例如min
,java.util.List
)。
Math.min
声明部分是源代码的编译时元素,在运行时不存在。在JVM字节码中,类型名称始终是完全限定的,除非您使用编写得不好的编译器,否则二进制文件应仅包含实际使用的类型的名称。
类加载器用于完全不同的概念,与import
功能完全无关。
导入声明允许
import
成员或命名类型通过由单个标识符组成的简单名称引用。如果不使用适当的static
声明,引用另一个包中声明的类型或另一个类型的import
成员的唯一方法是使用完全限定名称。单一类型导入声明通过提及其规范名称来导入单个命名类型。
type-import-on-demand声明根据需要导入命名类型或包的所有可访问类型。从未命名的包导入类型是编译时错误。
单个静态导入声明通过给出其规范名称,从类型中导入具有给定名称的所有可访问静态成员。
static-import-on-demand声明根据需要导入所有可访问的命名类型的静态成员。
static
相关问题关于import
的语法角色:
import
called? - 这是声明,而不是声明 on on-demand vs single-type:
import java.util.*;
and import java.util.Date;
? 在import
:
static
modifier after import
mean? 与绩效相关的问题:
答案 1 :(得分:4)
包由类组成,包中的类包含方法,变量等。 类具有全名,包括包名和类名。如果需要在代码中使用类,则需要为编译器提供类的全名。因此,您使用import语句或者您可以在代码中使用该类的每个位置键入完全限定名称。 / p>
例如,如果您的代码中需要AraryList
,则使用import语句import java.util.ArrayList;
,而不是在每个需要Arraylist的位置键入完全限定的类名。
有关详细信息,请参阅JLS。
答案 2 :(得分:3)
java中的导入只是编译器的提示。它根本不会影响二进制类文件的大小。您可以使用一次导入,也可以在每次使用时写入类的全名。
进口只是对可读性和开发商懒惰的让步。
答案 3 :(得分:2)
import
语句对编译器说:如果你有一个在这个类中找不到的函数,请查看导入列表。
这样你可以引用其他包中的函数,而不必将定义(如C(++)。h文件)复制到你自己的包中。
答案 4 :(得分:0)
Java中的import语句允许引用在其他包中声明的类,而不引用完整的包名。如果您愿意始终以其全名引用java.util.List,则不需要任何import语句,依此类推所有其他类。但是如果你想将它称为List,你需要导入它,以便编译器知道你所指的是哪个List。
java.lang包中的类会自动导入,因此您不需要显式执行此操作,例如引用String。
了解详情:http://wiki.answers.com/Q/Why_import_statement_is_needed_in_Java_program#ixzz1zDh2ZBhE