Может ли кто-нибудь четко объяснить мне, что именно происходит, когда мы используем оператор import в файлах Java? Увеличивает ли размер файла, добавляя все больше классов java? Почему мы не используем загрузчик классов для того же самого? И каковы ограничения на импорт?
Значение оператора import в файле Java
Ответ 1
import
объявления (не операторы) - это, по сути, краткосрочный механизм на уровне исходного кода: он позволяет ссылаться на элемент типа или static
, используя один идентификатор (например, List
, min
) в отличие от полного имени (например, java.util.List
, Math.min
).
import
раздел декларации является элементом времени компиляции исходных кодов и не имеет присутствия во время выполнения. В байт-кодах JVM имена типов всегда полностью квалифицированы, и если вы не используете плохо написанный компилятор, двоичный файл должен содержать только имена для используемых типов.
Погрузчики классов используются для совершенно иной концепции и не имеют ничего общего с функцией import
.
JLS 7.5 Импорт объявлений
Объявление импорта позволяет использовать элемент
static
или именованный тип простым именем, состоящим из одного идентификатора. Без использования соответствующего объявленияimport
единственный способ ссылаться на тип, объявленный в другом пакете, или членstatic
другого типа - использовать полное имя.В объявлении однотипного импорта импортируется один и тот же тип, указывая его каноническое имя.
Объявление типа импорта по требованию импортирует все доступные типы именованного типа или пакета по мере необходимости. Это ошибка времени компиляции для импорта типа из неназванного пакета.
Одно статическое объявление импорта импортирует все доступные статические члены с заданным именем из типа, указывая его каноническое имя.
Объявление static-import-on-demand импортирует все доступные статические члены именованного типа по мере необходимости.
Ссылки
- JLS 7.5.1 Декларация с одним типом импорта
- JLS 7.5.2 Декларация типа импорта по требованию
- JLS 7.5.3 Одиночная статическая декларация импорта
- JLS 7.5.4 Статическая декларация по требованию
См. также
Различные import
связанные вопросы
О грамматической роли import
:
- Что называется
import
? - это объявление, а не выражение
В режиме on-demand vs single-type:
- Импортировать пакет. * vs import package.SpecificType
- Почему использование дикой карты с выражением импорта Java плохое?
- В чем разница между
import java.util.*;
иimport java.util.Date;
?
Вкл import static
:
- Что означает модификатор
static
послеimport
? - Что является хорошим прецедентом для статического импорта методов?
- Должен ли я использовать статический импорт?
Проблемы, связанные с производительностью:
Ответ 2
Пакеты состоят из классов, классы в пакете состоят из методов, переменных и т.д. и т.д. Класс имеет полное имя, которое включает имя пакета и имя класса. Если вам нужно использовать класс в своем коде, вам нужно предоставить компилятору полное имя класса. Итак, вы используете оператор импорта или можете вводить полное имя для каждого места, в котором вы используете этот класс в своем коде.
Например, если вам нужен AraryList
в вашем коде, вы используете оператор import import java.util.ArrayList;
вместо того, чтобы вводить полное имя класса во все места, где вам нужен Arraylist.
Более подробную информацию см. в JLS.
Ответ 3
Импорт в java - это только подсказки для компилятора. Это не влияет на размер файла двоичного класса вообще. Вы можете использовать импорт один раз или написать полное имя класса каждый раз, когда вы его используете.
Импорт - это просто уступка читаемости и лени разработчика.
Ответ 4
Операторы import
говорят компилятору: если у вас есть функция, которая не может быть найдена в этом классе, посмотрите в список импорта.
Таким образом, вы можете ссылаться на функции в других пакетах без необходимости копировать определение (например, файлы C (++).h) в собственный пакет.
Ответ 5
Оператор импорта в Java позволяет ссылаться на классы, которые объявляются в других пакетах, к которым можно получить доступ, не ссылаясь на полное имя пакета. Вам не нужна инструкция импорта, если вы хотите всегда ссылаться на java.util.List по его полному имени и т.д. Для всех других классов. Но если вы хотите ссылаться на него как на List, вам нужно его импортировать, чтобы компилятор знал, к какому списку вы обращаетесь.
Классы из пакета java.lang автоматически импортируются, поэтому вам не нужно явно это делать, например, ссылаться на String.
Подробнее: http://wiki.answers.com/Q/Why_import_statement_is_needed_in_Java_program#ixzz1zDh2ZBhE