Java文件中的导入语句的含义

任何人都可以清楚地向我解释当我们在Java文件中使用import语句时究竟发生了什么? 如果我们添加更多的Java类,它会增加文件的大小吗? 为什么我们不使用class loader? import有什么限制?

import 声明 (不是语句 )本质上是源代码级别的短手段:它允许你使用一个标识符(例如Listmin )来引用一个types或一个static成员,而不是完全限定名称(例如java.util.ListMath.min )。

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

类装载机用于完全不同的概念,完全与importfunction无关。

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