Класс может использовать все классы из собственного пакета и все общедоступные классы из других пакетов. Доступ к классам их других пакетов можно получить двумя путями. Во первых, можно указывать полное имя пакета перед именем каждого класса. Например:
1 |
java.util.Date today = new java.util.Date(); |
Очевидно, что этот способ слишком утомителен. Более простой и распространенный способ предусматривает применение ключевого слова import. В этом случае имя пакета перед именем класса записывать не обязательно. Импортировать можно как один конкретный класс, так и весь пакет. Операторы import следует поместить в начало исходного файла(после всех операторов package). Например, все классы из пакета java.util можно импортировать следующим образом:
1 |
import java.util.*; |
После этого в строке кода, указанной ниже, имя пакета не указывается.
1 |
Date today = new Date(); |
Можно также импортировать отдельный класс из пакета:
1 |
import java.util.Date; |
Импортировать все классы проще. На размер кода это не влияет. Однако если явным образом указать импортируемый класс, становится ясно, какие именно классы будут использованы в программе.
Работая с Eclipse, можно использовать пункт меню Source->Organize Imports(Исходный код->Импортирование). В результате выражения типа import java.util.*; будут автоматически преобразованы в последовательности строк, предназначенных для импортирования отдельных классов:
1 2 |
import java.util.ArrayList; import java.util.Date; |
Эта возможность несколько упрощает работу программиста.
Однако следует заметить, что оператор import со звездочкой можно применять для импортирования только одного пакета. Нельзя использовать обозначение import java.* или import java.*.*, чтобы импортировать все пакеты, имена которых содержат префикс Java.
В большинстве случаев импортируется весь весь пакет, независимо от его размера. Единственный вариант, при котором на пакет следует обратить особое внимание — конфликт имен. Например, и пакет java.util и пакет java.sql содержат класс Date. Допустим, вы пишите программу, импортирующую оба этих пакета:
1 2 |
import java.util.*; import java.sql.*; |
Если теперь попытаться использовать класс Date, возникает ошибка компиляции:
1 |
Date today; // Ошибка -- java.util.Date или java.sql.date? |
Компилятор не может определить, какой класс Date вам нужен. Решить эту проблему можно, добавив конкретный оператор import:
1 2 3 |
import java.util.*; import java.util.sql.*; import java.util.Date; |
А если вам на самом деле нужны оба класса Date? В этом случае нужно указывать полное имя пакета для каждого имени класса:
1 2 |
java.util.Date deadline = new java.util.Date(); java.sql.Date today = new java.sql.Date(); |
Обнаружение классов в пакетах является задачей компилятора. В ссылках, находящихся в файлах классов, всегда содержатся полные имена пакетов.