Java文件中的导入语句的含义
任何人都可以清楚地向我解释当我们在Java文件中使用import语句时究竟发生了什么? 如果我们添加更多的Java类,它会增加文件的大小吗? 为什么我们不使用class loader? import有什么限制?
import
声明 (不是语句 )本质上是源代码级别的短手段:它允许你使用一个标识符(例如List
, min
)来引用一个types或一个static
成员,而不是完全限定名称(例如java.util.List
, Math.min
)。
import
声明部分是源代码的编译时元素,在运行时不存在。 在JVM字节码中,types名称始终是完全限定的,除非使用编写不好的编译器,否则二进制文件只应包含实际使用的types的名称。
类装载机用于完全不同的概念,完全与import
function无关。
JLS 7.5导入声明
导入声明允许通过由单个标识符组成的简单名称来引用
static
成员或命名types。 如果不使用适当的import
声明,则引用在另一个包中声明的types或另一个types的static
成员的唯一方法是使用完全限定名称。单types导入声明通过提及其规范名称来导入单个命名types。
types导入按需声明根据需要导入指定types或包的所有可访问types。 从未命名包中导入types是编译时错误。
单个静态导入声明通过给出其规范名称,从一个types导入具有给定名称的所有可访问的静态成员。
静态导入按需声明根据需要导入指定types的所有可访问的静态成员。
参考
- JLS 7.5.1单一types导入声明
- JLS 7.5.2types – 按需导入声明
- JLS 7.5.3单静态导入声明
- JLS 7.5.4静态导入按需声明
也可以看看
- Java教程/使用
package
成员 - Java语言指南/
static import
各种import
有关的问题
关于import
的语法作用:
- 什么是
import
? – 这是一个声明 ,而不是一个声明
按需与单一types:
- 导入包。* vs导入包.SpecificType
- 为什么在Java导入语句中使用通配符不好?
-
import java.util.*;
什么区别 并import java.util.Date;
?
在import static
:
-
import
后的static
修饰符是什么意思? - 静态导入方法的好用例是什么?
- 我应该使用静态导入吗?
与性能相关的问题:
- 包的导入是否改变类的可见性? – 绝对不!
- 程序中的多个导入语句是否会影响性能? – 不!
- 任何理由清理Java中的未使用的导入,而不是减less混乱?
java中的导入只是编译器的提示。 它根本不影响二进制类文件的大小。 您可以使用一次导入或每次使用时写出类的全名。
import只是对可读性和开发者的懒惰的让步。
包由类组成,包中的类由方法,variables等组成。一个类有一个全名,它由包名和类名组成。 如果您需要在代码中使用类,则需要为编译器提供该类的全名。因此,您可以使用import语句,或者可以在代码中使用该类的每个位置键入完全限定的名称。
例如,如果在代码中需要AraryList
,则使用import语句import java.util.ArrayList;
而不是在每个需要Arraylist的地方input完整的类名。
有关更多详细信息,请参阅JLS 。
import
语句对编译器说:如果你有一个在这个类中找不到的函数,请在导入列表中查找。
这样你就可以引用其他包中的函数,而不必将定义(如C(++).h文件)复制到你自己的包中。
Java中的import语句允许引用在其他包中声明的类而不用引用完整的包名。 如果您总是以其全名引用java.util.List,则不需要任何导入语句,所有其他类都是如此。 但是如果你想把它称为List,你需要导入它,以便编译器知道你指的是哪个List。
例如,java.lang包中的类会自动导入,因此不需要明确地执行此操作,以引用String。
阅读更多: http : //wiki.answers.com/Q/Why_import_statement_is_needed_in_Java_program#ixzz1zDh2ZBhE