Если в Java нет препроцессора, что такое «импорт» - PullRequest
6 голосов
/ 14 ноября 2011

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

Ответы [ 5 ]

13 голосов
/ 14 ноября 2011

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

Чтобы уточнить, если я сделаю import java.util.ArrayList;, теперь я могу сослаться на ArrayList класс как просто 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 голосов
/ 14 ноября 2011

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

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

1 голос
/ 14 ноября 2011

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

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

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

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

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

1 голос
/ 14 ноября 2011

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

0 голосов
/ 14 ноября 2011

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

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

...