Если Java не имеет препроцессора, что такое «импорт»

#java #language-features

#java #особенности языка

Вопрос:

В этой статье больше не говорится о Typedefs, Defines или препроцессоре в 2.2.1 . В C include является частью препроцессора. Что такое import ?

Комментарии:

1. Стоит отметить, что более похожим ключевым словом в C является using .

2. @Bringer128 using является частью C #, а не C . В C / C это слово — #include "..." или include <...> 🙂

3. Я имел в виду это ключевое слово

Ответ №1:

Импорт, несмотря на название, ничего не «импортирует», он просто позволяет вам вызывать классы без полного имени.

Чтобы уточнить, если я выполняю import java.util.ArrayList; , теперь я могу ссылаться на ArrayList class как просто ArrayList . Если я этого не сделаю, я все равно смогу использовать класс, мне просто нужно его вызвать java.util.ArrayList .

Если вы импортируете целые пакеты с помощью * , худшее, что может случиться, это конфликт имен, поэтому вам придется использовать полное имя для ссылки на класс Java, но он не использует больше памяти во время выполнения.

Классы в java.lang автоматически «импортируются».

В Java 1.5 введен статический импорт, который позволяет программистам ссылаться на импортированные статические элементы так, как если бы они были объявлены в использующем их классе. Их следует использовать экономно. Приемлемым использованием является импорт методов JUnit Assert. Например, при традиционном импорте:

 import org.junit.Assert;
...
Assert.assertEquals(expected, actual);
  

При статическом импорте:

 import static org.junit.Assert.assertEquals;
...
assertEquals(expected, actual);
  

Ответ №2:

Импорт позволяет использовать неквалифицированное имя класса. Например, с помощью import java.util.ArrayList вы можете использовать в своем коде неквалифицированное имя типа ArrayList . Без инструкции import вам пришлось бы всегда использовать полное имя: java.util.ArrayList .

Существует также статический импорт, который переносит элементы статического класса в пространство имен модуля компиляции.

Ответ №3:

import делает имена пакетов известными в файле, где они используются. Это совсем не сравнимо с C #inlclude .

Ответ №4:

Из-за жесткого соглашения об именовании исходного кода компилятор Java может легко найти соответствующие файлы исходного кода или класса просто по полному имени пакета и класса. Под полным именем я подразумеваю указание полного пакета и класса, например

 java.util.ArrayList x = new java.util.ArrayList ();
  

Альтернативой этому многословному стилю кодирования является использование инструкций import.

 import java.io.*;
import java.util.ArrayList;
ArrayList x = new java.util.ArrayList();
  

Также это отличная помощь в понимании чужого кода

Ответ №5:

Способ сообщить компилятору, что вы используете какой-то класс из другого пакета?

РЕДАКТИРОВАТЬ: ссылка на спецификацию