ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 12.01.2024
Просмотров: 113
Скачиваний: 5
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Содержание
16
14.3.9. Расширение классов и реализация интерфейсов в Java
522 14.3.10. Исключения
524 14.4. Написание сценариев командного процессора средствами Nashorn
524 14.4.1. Выполнение команд из командного процессора
525 14.4.2. Интерполяция символьных строк
526 14.4.3. Ввод данных в сценарий
527
Упражнения
528
15
МОДУЛЬНАЯ СИСТЕМА НА ПЛАТФОРМЕ JAVA
531 15.1. Понятие модуля
533 15.2. Именование модулей
535 15.3. Пример модульной программы "Hello, World!"
535 15.4. Требования модулей
537 15.5. Экспорт пакетов
540 15.6. Модули и рефлективный доступ
543 15.7. Модульные архивные JAR-файлы
546 15.8. Автоматические и безымянные модули
548 15.9. Параметры командной строки для переноса прикладного кода 550 15.10. Переходные и статические требования
552 15.11. Уточненный экспорт и открытие модулей
554 15.12. Загрузка служб
555 15.13. Инструментальные средства для работы с модулями
557
Упражнения
560
ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ
563
Java_SE_9_for_the_Impatient_2nd_Edit.indb 16 16.04.2018 16:40:07
Предисловие
Язык программирования Java существует уже более двадцати лет, и в классическом издании Core Java™ (в русском переводе это десятое издание вышло в двух томах под общим названием Java. Библиотека профессионала в
ИД “Вильямс”, 2017 г.) во всех подробностях описывается не только сам язык, но и все основные его библиотеки, а также многочисленные изменения в оче- редных версиях. Но если вам требуется лишь перейти на современную вер- сию языка Java и освоить его основные библиотеки, чтобы работать более продуктивно, то это можно сделать более простым и кратким путем. В этой книге не прослеживается история развития и не рассматриваются подробно языковые средства предыдущих версий Java, а раскрываются наилучшие сто- роны современной, девятой версии Java, чтобы их можно было быстро при- менить на практике.
Как и в предыдущих моих книгах, написанных в стиле изложения “для нетерпеливых”, мне хотелось сразу ввести вас, читатель, в курс дела, не вда- ваясь в подробное рассмотрение преимуществ одних понятий над другими, чтобы показать, что именно вам нужно знать для решения конкретных задач программирования. Поэтому материал в этой книге представлен небольши- ми фрагментами, организованными таким образом, чтобы вы могли быстро извлечь полезные сведения по мере надобности.
Если у вас имеется опыт программирования на других языках, напри- мер C++, JavaScript, Objective C, PHP или Ruby, эта книга поможет вам гра- мотно программировать и на Java. В ней рассматриваются все особенности
Java, которые должны быть известны разработчику, включая эффективные лямбда-выражения и потоки данных. В этой книге делаются ссылки на уста- ревшие понятия и языковые конструкции, которые могут встретиться в унас- ледованном коде, но я не буду останавливаться на них подробно.
Главная причина для использования Java состоит в том, чтобы решать задачи параллельного программирования. Имея в своем распоряжении па- раллельные алгоритмы и потокобезопасные структуры данных, доступные в готовом виде в библиотеке Java, прикладные программисты должны совсем иначе отнестись к параллельному программированию. В этой книге под со- вершенно новым углом зрения будет показано, как пользоваться эффектив- ными библиотечными средствами вместо чреватых ошибками низкоуровне- вых конструкций.
Java_SE_9_for_the_Impatient_2nd_Edit.indb 18 16.04.2018 16:40:07
19
Посвящение
По традиции в книгах по Java основное внимание уделяется программи- рованию пользовательского интерфейса, но ныне лишь немногие разработ- чики создают пользовательские интерфейсы для настольных систем. Если вы предполагаете пользоваться Java для программирования на стороне сервера или на платформе Android, данная книга поможет вам делать это эффек- тивно, не отвлекаясь на код графического пользовательского интерфейса на- стольных систем.
И наконец, книга написана для прикладных, но не для системных про- граммистов или тех, кто изучает программирование в учебных заведениях.
В этой книге рассматриваются вопросы, которые приходится решать при- кладным программистам, включая протоколирование и обработку файлов.
Но из нее нельзя узнать, как реализовать связный список вручную или напи- сать код для веб-сервера.
Надеюсь, что вам понравится это беглое введение в современную версию
Java, а также на то, что оно сделает вашу работу с Java более производитель- ной и приятной. Если вы обнаружите ошибки в книге или имеете дельные предложения по ее усовершенствованию, оставьте комментарии на веб-стра- нице, доступной по адресу http://horstmann.com/javaimpatient. На этой странице вы найдете также ссылку на архивный файл, содержащий весь код из примеров, приведенных в книге.
Java_SE_9_for_the_Impatient_2nd_Edit.indb 19 16.04.2018 16:40:07
Благодарности
Как всегда, выражаю искреннюю благодарность своему редактору Грегу
Дёнчу (Greg Doench), которому принадлежит замысел издать краткое посо- бие для прикладных программистов, чтобы помочь им поскорее освоить вер- сию Java SE 9. Как и прежде, Дмитрий и Алина Кирсановы превратили ру- копись формата XHTML в привлекательную книгу, сделав это поразительно быстро и в то же время уделив должное внимание деталям. Благодарю также рецензентов книги, обнаруживших в ней немало досадных ошибок и внес- ших ряд дельных предложений по ее улучшению. Среди них хотелось бы от- метить Андреса Алмирая (Andres Almiray), Гейла Андерсона (Gail Anderson),
Маркуса Биля (Marcus Biel), Брайна Гётца (Brian Goetz), Марти Холла (Marty
Hall), Марка Лоуренса (Mark Lawrence), Дуга Ли (Doug Lea), Саймона Ритте- ра (Simon Ritter), Йошики Шибата (Yoshiki Shibata) и Кристиана Улленбоома
(Christian Ullenboom).
Кей Хорстманн,
Сан-Франциско, США
июль 2017 г.
Java_SE_9_for_the_Impatient_2nd_Edit.indb 20 16.04.2018 16:40:07
Глава 11
Аннотации
В этой главе...
11.1. Применение аннотаций
11.2. Определение аннотаций
11.3. Стандартные аннотации
11.4. Обработка аннотаций во время выполнения
11.5. Обработка аннотаций на уровне исходного кода
Упражнения
11
Глава
Java_SE_9_for_the_Impatient_2nd_Edit.indb 431 16.04.2018 16:40:27
Глава 11
Аннотации
432
Аннотации являются дескрипторами, вставляемыми в исходный код с целью обработать их какими-нибудь инструментальными средствами. Эти средства могут действовать на уровне исходного кода или обрабатывать фай- лы классов, в которых компилятор разместил аннотации.
Аннотации не изменяют порядок компиляции программы. Компилятор
Java генерирует те же самые инструкции для виртуальной машины как при наличии аннотаций, так и в их отсутствие. Чтобы извлечь выгоду из аннота- ций, нужно выбрать подходящее инструментальное средство их обработки и пользоваться теми аннотациями, которые оно понимает, прежде чем приме- нять его в своем коде.
Аннотации находят широкое применение. Например, в инструменталь- ном средстве модульного тестирования JUnit они применяются для пометки методов, выполняющих тесты, а также для указания порядка их выполнения.
А в архитектуре Java Persistence Architecture аннотации служат для определе- ния взаимных преобразований классов и таблиц базы данных, чтобы объек- ты могли сохраняться автоматически, не вынуждая разработчиков писать для этой цели запросы SQL.
В этой главе рассматриваются особенности синтаксиса аннотаций, опреде- ления собственных аннотаций и написания процессоров аннотаций, работа- ющих на уровне исходного кода во время выполнения.
Основные положения этой главы приведены ниже.
1. Аннотировать можно объявления аналогично употреблению таких мо- дификаторов доступа, как public или static.
2. Аннотировать можно также типы данных, появляющиеся в объявлени- ях, приведение и проверки типов instanceof или ссылки на методы.
3. Аннотации начинаются со знака
@ и могут содержать пары “ключ–зна- чение”, называемые элементами аннотаций.
4. Значениями аннотаций должны быть константы времени компиляции, т.е. статические константы: примитивных типов, перечислимого типа, литералы типа Class, другие аннотации или их массивы.
5. Элемент кода может быть снабжен повторяющимися или разнотипны- ми аннотациями.
6. Чтобы определить аннотацию, достаточно указать ее интерфейс, мето- ды которого соответствуют элементам аннотации.
7. В библиотеке Java определяется более десятка аннотаций, которые ши- роко применяются в версии Java Enterprise Edition.
8. Для обработки аннотаций в выполняющейся программе на Java можно воспользоваться рефлексией, запрашивая получаемые с ее помощью элементы кода для аннотаций.
Java_SE_9_for_the_Impatient_2nd_Edit.indb 432 16.04.2018 16:40:27
433
11.1. Применение аннотаций
9. Процессоры аннотаций служат для обработки исходных файлов во вре- мя компиляции, используя прикладной программный интерфейс API модели языка для обнаружения аннотированных элементов кода.
11.1. Применение аннотаций
Ниже приведен пример простой аннотации.
public class CacheTest {
@Test public void checkRandomInsertions()
}
В данном примере аннотация @Test служит для аннотирования метода checkRandomInsertions(). В языке Java аннотация применяется аналогично модификатору доступа вроде public или static. Имя каждой аннотации предваряется знаком @.
Сама аннотация @Test ничего не делает. Для того чтобы она принесла ка- кую-то пользу, требуется специальное инструментальное средство. Напри- мер, в инструментальном средстве тестирования JUnit 4, свободно доступном по адресу http://junit.org, вызовы всех методов помечаются аннотацией
@Test при тестировании их класса. А другое инструментальное средство мо- жет удалить все тестовые методы из файла класса, чтобы они не поставлялись вместе с программой после ее тестирования.
11.1.1. Элементы аннотаций
У аннотаций могут быть пары “ключ–значение”, называемые элементами, как показано ниже.
@Test(timeout=10000)
Имена и типы допустимых элементов определяются каждой аннотацией
(см. далее в разделе 11.2). Элементы аннотаций могут быть обработаны ин- струментальными средствами, читающими аннотации.
К числу элементов аннотаций относятся следующие.
•
Значение примитивного типа.
•
Объект типа String.
•
Объект типа Class.
•
Экземпляр перечислимого типа.
•
Собственно аннотация.
•
Массив любых из перечисленных выше элементов, но не массив массивов.
Java_SE_9_for_the_Impatient_2nd_Edit.indb 433 16.04.2018 16:40:27
Глава 11
Аннотации
434
В качестве примера ниже приведена аннотация, состоящая из разнотип- ных элементов.
@BugReport(showStopper=true, assignedTo="Harry", testCase=CacheTest.class, status=BugReport.Status.CONFIRMED)
ВНИМАНИЕ! Элемент аннотации вообще не может иметь пустое значение
null.
Элементы аннотаций могут иметь значения, устанавливаемые по умол- чанию. Например, значение по умолчанию элемента timeout аннотации
@Test равно 0L. Следовательно, аннотация @Test равнозначна аннотации
@Test(timeout=0L).
Если элемент аннотации называется value и является указанным в ней единственным элементом, то присваивание value= можно опустить. Напри- мер, аннотация @SuppressWarnings("unchecked") равнозначна аннотации
@SuppressWarnings(value="unchecked").
Если в качестве значения аннотации присваивается массив, то его элемен- ты заключаются в фигурные скобки, как показано ниже.
@BugReport(reportedBy={"Harry", "Fred"})
Фигурные скобки можно опустить, если массив состоит из единственного элемента, как в следующей строке кода:
@BugReport(reportedBy="Harry") // То же, что и {"Harry"}
В качестве элемента одной аннотации может служить другая аннотация, как показано ниже.
@BugReport(ref=@Reference(id=11235811), ...)
ВНИМАНИЕ! Аннотации вычисляются компилятором, и поэтому все значения их элемен- тов должны быть константами времени компиляции, т.е. статическими константами.
11.1.2. Многие и повторяющиеся аннотации
Элемент кода может быть помечен несколькими аннотациями, как пока- зано ниже.
@Test
@BugReport(showStopper=true, reportedBy="Joe") public void checkRandomInsertions()
Java_SE_9_for_the_Impatient_2nd_Edit.indb 434 16.04.2018 16:40:27