Spec-Zone .ru
спецификации, руководства, описания, API
След: Изучение Языка Java
Урок: Пакеты
Раздел: Создание и Используя Пакеты
Используя Элементы Пакета
Домашняя страница > Изучение Языка Java > Пакеты

Используя Элементы Пакета

Типы, которые включают пакет, известны как элементы пакета.

Использовать a public элемент пакета снаружи его пакета, следует сделать одно из следующего:

Каждый является подходящим для различных ситуаций, как объяснено в разделах, которые следуют.

Что касается Элемента Пакета Его Полностью определенным именем

До сих пор большинство примеров в этом учебном руководстве упомянуло типы своими простыми именами, такой как Rectangle и StackOfInts. Можно использовать простое имя элемента пакета, если код, который Вы пишете, находится в том же самом пакете как тот элемент или если тот элемент был импортирован.

Однако, если Вы пытаетесь использовать элемент от различного пакета, и тот пакет не был импортирован, следует использовать полностью определенное имя элемента, которое включает имя пакета. Вот полностью определенное имя для Rectangle class, объявленный в graphics пакет в предыдущем примере.

graphics.Rectangle

Вы могли использовать это полностью определенное имя, чтобы создать экземпляр graphics.Rectangle:

graphics.Rectangle myRect = new graphics.Rectangle();

Полностью определенные имена в порядке для нечастого использования. Когда имя используется повторно, однако, вводя имя неоднократно становится утомительным, и код становится трудным читать. Как альтернатива, можно импортировать элемент или его пакет и затем использовать его простое имя.

Импорт Элемента Пакета

Чтобы импортировать определенный элемент в текущий файл, поместите import оператор в начале файла перед любыми определениями типа, но после package оператор, если есть тот. Вот то, как Вы импортировали бы Rectangle class от graphics пакет создается в предыдущем разделе.

import graphics.Rectangle;

Теперь можно обратиться к Rectangle class его простым именем.

Rectangle myRectangle = new Rectangle();

Этот подход работает хорошо, если Вы используете только несколько элементов от graphics пакет. Но если Вы используете много типов от пакета, следует импортировать весь пакет.

Импорт Всего Пакета

Чтобы импортировать все типы, содержавшиеся в определенном пакете, используйте import оператор со звездочкой (*) подстановочный символ.

import graphics.*;

Теперь можно обратиться к любому class или взаимодействовать через интерфейс в graphics пакет его простым именем.

Circle myCircle = new Circle();
Rectangle myRectangle = new Rectangle();

Звездочка в import оператор может использоваться только, чтобы определить все классы в пределах пакета, как показано здесь. Это не может использоваться, чтобы соответствовать подмножество классов в пакете. Например, следующее не соответствует все классы в graphics пакет, которые начинаются A.

// does not work
import graphics.A*;

Вместо этого это генерирует ошибку компилятора. С import оператор, Вы обычно импортируете только единственный элемент пакета или весь пакет.


Отметьте: Другой, меньше стандартной формы import позволяет Вам импортировать общественность вложенные классы включения class. Например, если graphics.Rectangle class содержавшие полезные вложенные классы, такой как Rectangle.DoubleWide и Rectangle.Square, Вы могли импортировать Rectangle и его вложенные классы при использовании следующих двух операторов.
import graphics.Rectangle;
import graphics.Rectangle.*;
Знайте, что второй оператор импорта не будет импортировать Rectangle.

Еще меньше стандартной формы import, статический оператор импорта, будет обсужден в конце этого раздела.

Для удобства компилятор Java автоматически импортирует три всех пакета для каждого исходного файла: (1) пакет без имени, (2) java.lang пакет, и (3) текущий пакет (пакет для текущего файла).

Очевидные Иерархии Пакетов

Сначала, пакеты, кажется, являются иерархическими, но они не. Например, API Java включает a java.awt пакет, a java.awt.color пакет, a java.awt.font пакет, и многие другие, которые начинают java.awt. Однако, java.awt.color пакет, java.awt.font пакет, и другой java.awt.xxxx пакеты не включаются в java.awt пакет. Префикс java.awt (Abstract Window Toolkit Java), используется для многих связанных пакетов, чтобы сделать отношение очевидным, но не показать включение.

Импорт java.awt.* импорт все типы в java.awt пакет, но это не импортирует java.awt.color, java.awt.font, или любой другой java.awt.xxxx пакеты. Если Вы планируете использовать классы, и другой вводит java.awt.color так же как те в java.awt, следует импортировать оба пакета со всеми их файлами:

import java.awt.*;
import java.awt.color.*;

Неоднозначности имени

Если элемент в одном пакете совместно использует свое имя с элементом в другом пакете, и оба пакета импортируются, следует обратиться к каждому элементу его полностью определенным именем. Например, graphics пакет, определенный class, называют Rectangle. java.awt пакет также содержит a Rectangle class. Если оба graphics и java.awt были импортированы, следующее неоднозначно.

Rectangle rect;

В такой ситуации необходимо использовать полностью определенное имя элемента, чтобы указать точно который Rectangle class Вы хотите. Например,

graphics.Rectangle rect;

Статический Оператор Импорта

Есть ситуации, где Вы нуждаетесь в частом доступе к статическим заключительным полям (константы) и статическим методам от одного или двух классов. Добавление префикса имени этих классов много раз может привести к нарушенному коду. Статический оператор импорта дает Вам способ импортировать константы и статические методы, которые Вы хотите использовать так, чтобы Вы не должны были снабдить префиксом имя их class.

java.lang.Math class определяет PI постоянный и много статических методов, включая методы для того, чтобы вычислить синусы, косинусы, касательные, квадратные корни, максимумы, минимумы, экспоненты, и еще много. Например,

public static final double PI 
    = 3.141592653589793;
public static double cos(double a)
{
    ...
}

Обычно, чтобы использовать эти объекты от другого class, Вы снабжаете префиксом имя class, следующим образом.

double r = Math.cos(Math.PI * theta);

Можно использовать статический оператор импорта, чтобы импортировать статические элементы java.lang. Математика так, чтобы Вы не должны были снабдить префиксом имя class, Math. Статические элементы Math может быть импортирован любой индивидуально:

import static java.lang.Math.PI;

или как группа:

import static java.lang.Math.*;

Как только они были импортированы, статические элементы могут использоваться без квалификации. Например, предыдущий фрагмент кода стал бы:

double r = cos(PI * theta);

Очевидно, можно записать свои собственные классы, которые содержат константы и статические методы, которые Вы часто используете, и затем используете статический оператор импорта. Например,

import static mypackage.MyConstants.*;

Отметьте: Используйте статический импорт очень экономно. Злоупотребление статического импорта может привести к коду, который трудно считать и поддержать, потому что читатели кода не будут знать, который class определяет определенный статический объект. Используемый должным образом, статический импорт делает код более читаемым, удаляя повторение имени class.

Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Именование Пакета
Следующая страница: Управление Источником и Файлами Класса