Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие Java .pdf
Скачиваний:
132
Добавлен:
16.03.2015
Размер:
1.32 Mб
Скачать

import attr.Attributed;

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

Также существует один пакет, который всегда импортируется по умолчанию: java.lang. В данном пакете содержатся типы, лежащие в основе языка.

Важно понимать суть механизма импортирования в Java: единственное, что он позволяет делать – это использовать простые имена вместо полных, при этом не происходит никакого копирования исходного кода или байт-кода. Но компилятор, при обнаружении в тексте программы простого имени, которое не может быть найдено в текущем пакете, просмотрит предложения об импортировании в поисках импортированного типа с совпадающим простым именем, или импортированного пакета, вкотором есть тип ссовпадающимпростымименем.

1.8 Понятие имени

Имена задаются посредством идентификаторов и указывают на элементы программы (типы, переменные, поля, методы и т.д.). Идентификатор является последовательностью цифр и букв (а с учётом ориентированности Java на Unicode – достаточно разнообразных букв), не может включать в себя символы-разделители (например, точку) и не может начинаться с цифры.

Задача управления именами элементов программы решается посредством двух механизмов. Во-первых, для элементов различных видов рассматриваются различные пространства имён (namespace). Во-вторых, имена, видимые в одной части программы, «скрываются» от других посредством соответствующих контекстов. Так, например, разделение пространств имён позволяет использовать один и тот же идентификатор для поля и метода класса, а средства контекстного

24

сокрытия дают возможность пользоваться одним идентификатором для обозначения переменных-счётчиков всех циклов for.

Существует шесть различных пространств имён:

пакеты,

типы,

поля,

методы,

локальные переменные и параметры,

метки.

Разделение пространств имён обеспечивает гибкие возможности

написания программ, но при неразумном использовании оно способен доставить и серьёзные неприятности (см. пример 3).

Пример 3. Душераздирающий, но синтаксически правильный код package Reuse;

class Reuse {

Reuse Reuse (Reuse Reuse) { Reuse:

for(;;) {

if (Reuse.Reuse(Reuse)== Reuse) break Reuse;

}

return Reuse;

}

}

Каждое объявление имени определяет контекст, в котором имя может использоваться. Например, контекстом параметра метода служит блок тела этого метода; контекст локальной переменной определяется границами блока, в котором она определена; контекст переменной цикла, объявленной в секции инициализации заголовка цикла for, распространяется на блок тела цикла.

25

Имя нельзя использовать за пределами его контекста – например, один метод класса не способен обращаться к параметрам другого метода. Контексты, однако, могут быть вложенными, и код внутреннего контекста обладает правами доступа ко всем именам внешнего контекста. Например, разрешено обращаться из тела цикла for к локальным переменным, объявленным в пределах того же метода, где находится и цикл for.

Подразумевается, что имена, объявленные во внешних контекстах, в некоторых случаях могут быть скрыты именами, принадлежащими внутренним контекстам. Например, имена полей класса способны перекрываться именами локальных переменных, унаследованные поля класса – полями, объявленными в текущем классе.

Не разрешается перекрывать имена во вложенных контекстах внутри одного блока кода. Это означает, что локальная переменная в теле метода не может обладать тем же именем, что и параметр метода; переменную цикла for не разрешается обозначать именем, которое принадлежит локальной переменной или параметру; во вложенном блоке нельзя повторно использовать имена, объявленные во внешнем блоке (см. пример 4).

Пример 4. Неверное объявление переменных во вложенных контекстах

{

int a = 0;

{

int a = 2; // неверно, переменная уже объявлена

// …

}

}

Впрочем, ничто не запрещает создавать в пределах блока различные (невложенные) циклы for или применять невложенные блоки с объявлениями одноимённых переменных.

26

Кроме того, в Java существуют общепринятые правила именования (они являются частью общепринятых правил по оформлению кода). Следование этим правилам, с одной стороны, не проверяется компилятором, но, с другой стороны, следование им облегчит работу с текстом программы и вам, и другим программистам.

Пакеты всегда именуются только маленькими буквами. Пакеты, имена которых начинаются с java, являются стандартными пакетами языка (например java.lang, java.util). Пакеты, имена которых начинаются с javax, являются дополнительными пакетами, вошедшими в стандарт языка (например, javax.swing, javax.xml). Прочие пакеты, разрабатываемые компаниями и сообществами, принято именовать в соответствии с названием сайта разработчика. Так, если пакет dom разработан консорциумом W3C, имеющим сайт www.w3c.org, то именем пакета должно быть org.w3c.dom.

Типы именуются с большой буквы, новые слова обозначаются написанием с большой буквы, разделители не используются. Имя типа должно быть говорящим, аббревиатуры обычно используют, только если они общеизвестные. Для классов имена обычно обозначают категорию объектов (например, Student,

ArrayIndexOutOfBoundException), а для интерфейсов – либо категорию, либо способность к чему-либо (например, Runnable).

Поля именуются с маленькой буквы, новые слова обозначаются написанием с большой буквы, разделители не используются

(например, value, enabled, distanceFromShop).

Методы именуются с маленькой буквы, новые слова обозначаются написанием с большой буквы, разделители не используются (например, calculate, toString, concat). Если метод предназначен только для получения некоторого значения, то его имя должно начинаться со слова get (например, getHeight) или со слова is, если значение булево (например, isVisible).

27

Соседние файлы в предмете Программирование на Java