Философия Java3
Шрифт:
кода, 169 повышение, 92 подобъект, 175, 184 позднее связывание, 198, 202 поле TYPE (для примитивов), 359 полиморфизм, 31, 198, 220, 353, 395 и конструкторы, 208 разделение типов, 198 потоки, 557 потоки выполнения
взаимное исключение, 581 взаимодействие через ввод/вывод, 601 демоны, 567 недостатки, 630 ожидание, 564, 598 передача управления, 567 последовательность выполнения, 564 приоритет, 565 присоединение, 576 производительность, 558 простая блокировка, 582 рекомендации по применению, 629 синхронизация, 581
совместное использование ограниченных
ресурсов, 578 уведомление, 598 предпочтения, 553 преждевременная ссылка, 139 преобразование
восходящее, 186, 199
операций, 72 потоков, 565 присвоение, 73 программист-клиент, 152 производные классы, 25 производный класс, инициализация, 174 пространство
имен, 153 пустые константы, 190
Р
разделение
интерфейса и реализации, 164 раннее связывание, 201 распечатка в двоичном формате, 88 расширяемая программа, 205 реализация
сокрытие, 163, 249 рефлексия, 376, 468
отличие от RTTI, 377
С
С++, 48
сборка мусора, 130, 132
как работает сборщик мусора, 134 порядок удаления объектов, 182 сборщик мусора, 54 связуемость, 22 связывание
во время выполнения , 198, 202 динамическое, 198 позднее, 198
позднее (динамическое), 202 раннее, 202 сервлеты, 47 сериализация
и ключевое слово transient, 544 и хранение объектов, 548 управление процессом сериализации, 540 сигнатура, 57 синонимией, 74
синхронизированная блокировка, 591
система управления, 266
события
система, управляемая по событиям, 266 совмещение имен, 74 сокрытие реализации, 163 сообщения, 20 спецификатор
protected, 185 спецификатор доступа, 152, 159 private, 152, 162 protected, 152, 163 public, 152, 160 интерфейс, 225 список, 280 ссылки, 49
статический блок, 144 стек, 292
стиль написания классов, 164 строка
перегрузка оператора + 173
т
удаленный вызов методов, 536 указатели, отсутствие в Java, 264
С++, деструктор, 130 Java, компиляция и запуск программы, 63
хранение данных, 50
Брюс Эккель
Философия Java. Библиотека программиста 4-е издание
Перевел с английского Е. Матвеев
Заведующий редакцией Руководитель проекта Ведущий редактор Научные редакторы Художественный редактор Корректоры Верстка
А. Сандрыкин П. Маннинен А. Пасечник Е. Матвеев, А. Пасечник А. Татарко Е. Каюрова, И. Тимофеева Л. Харитонов
Подписано в печать 29.08.08. Формат 70x100/16. Усл. п. л. 51,6. Тираж 2000. Заказ № 829. ООО «Питер Пресс», 198206, Санкт-Петербург, Петергофское шоссе, д. 73, лит. А29. Налоговая льгота — общероссийский классификатор продукции OK 005-93,
том 2;95 3005 — литература учебная. Отпечатано по технологии CtP в в ГП ПО «Псковская областная типография». 180004, г. Псков, ул. Ротная, 34.
1 Некоторые разработчики языков считают, что объектно-ориентированное программирование плохо подходит для решения некоторых задач, и выступают за объединение разных подходов в муль-типарадигменных
Для большинства диаграмм этого вполне достаточно. Не обязательно уточнять, что именно используется в данном случае — композиция или агрегирование.
2 На самом деле это слишком сильное утверждение, поскольку объекты могут существовать на разных компьютерах и адресных пространствах, а также храниться на диске. В таких случаях для идентификации объекта приходится использовать не адрес памяти, а что-то другое.
Некоторые специалисты различают эти два понятия: они считают, что тип определяет интерфейс, а класс — конкретную реализацию этого интерфейса.
3 Примитивные типы в контейнерах храниться не могут, но благодаря механизму автоматической упаковки Java SE5 это ограничение почти несущественно. Далее в книге эта тема будет рассмотрена более подробно.
4 Примитивные типы, о которых речь пойдет далее, являются особым случаем.
5 Этот вопрос очень важен. Существуют люди, утверждающие: «Ясно, это указатель», но это предполагает соответствующую реализацию. Также ссылки Java по синтаксису более похожи на ссылки С++, чем на его указатели. В первом издании книги я решил ввести новый термин «дескриптор» (handle), потому что ссылки Java и С++ имеют несколько значительных различий. Я основывался на опыте С++ и не хотел сбивать с толку программистов на этом языке, так как большей частью именно они будут изучать Java. Во втором издании я решил прибегнуть к более традиционному термину «ссылка», предположив, что это поможет быстрее освоить новые особенности языка, в котором и без моих новых терминов много необычного. Однако есть люди, возражающие против термина «ссылка». Я прочитал в одной книге, что «совершенно неверно говорить, что Java поддерживает передачу объектов по ссылке», потому что идентификаторы объектов Java на самом деле (согласно автору) являются ссылками на объекты. И (он продолжает) все фактически передается по значению. Так что передача идет не по ссылке, а «ссылка на объект передается по значению». Можно поспорить с тем, насколько точны столь запутанные рассуждения, но я полагаю, что мое объяснение упрощает понимание концепции и ничему не вредит (блюстители нравственности могут сказать, что я лгу вам, но я всегда могу возразить, что речь идет всего лишь о подходящей абстракции).
Документация JDK и компилятор Java не включены в состав компакт-диска, поставляемого с этой книгой, потому что они регулярно обновляются. Загрузив их самостоятельно, вы получите самые свежие версии.
6 Статические методы, о которых вы узнаете немного позже, вызываются для класса, а не для объекта.
7 Часто используется компилятор IBM jikes, так как он работает намного быстрее компилятора javac от Sun. Также существуют проекты с открытыми исходными текстами, направленные на создание компиляторов, сред времени исполнения и библиотек Java.