Spec-Zone .ru
спецификации, руководства, описания, API
|
Типы, которые включают пакет, известны как элементы пакета.
Использовать 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.*;