Философия java 5 е издание

Библиотека программиста запись закреплена

Философия Java. 4-е издание. (Брюс Эккель)

Java нельзя понять, взглянув на него только как на коллекцию некоторых характеристик, — необходимо понять задачи этого языка как частные задачи программирования в целом.
Эта книга — о проблемах программирования: почему они стали проблемами и какой подход использует Java в их решении. Поэтому обсуждаемые в каждой главе черты языка неразрывно связаны с тем, как они используются для решения определенных задач.
Эта книга, выдержавшая в оригинале не одно переиздание, за глубокое и поистине философское изложение тонкостей языка считается одним из лучших пособий для программирующих на Java.
В четвертом издании автор постарался полностью интегрировать усовершенствования Java SE5/6, включить и использовать их во всей книге.

На вопрос «С какой книги начать изучение Java?» очень часто отвечают: Thinking in Java Брюса Эккеля.
Но вот беда — эта книга (4-е издание) не содержит в конце каждой из глав вопросы и практикум…

Именно того, что способствует наиболее эффективному изучению языка!

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

Почему бы не поделиться этими заметками-вопросами с Вами?

Приведен список составленных на данный момент вопросов.
Вопросы типа «Что такое внутренний класс?» отсутствуют. Такие определения, на мой взгляд, четко формируются по мере чтения главы и не требуют скучного и банального вопроса для подкрепления.

А также отсутствуют вопросы, наподобие «что такое stack? каковы особенности его работы?». Они являются базовыми для многих языков и для всего программирования в целом. Поэтому старался их избегать.

В целом, я старался формулировать вопросы о различных интересных тонкостях и нюансах, которые требуют периодического повторения.

В конце вопросника приведен сделанный мной перевод некоторых упражнений-заданий, опубликованных в англоязычном оригинале книги. Указаны страницы, на которых эти упражнения напечатаны.

Вас приятно удивит, что к большинству ответов на вопросы добавлены номера страниц русского издания. На этих страницах также напечатаны ответы на сформулированные вопросы.

Примитивы в качестве элементов контейнера выступать не могут. В контейнер можно поместить только ссылки на объекты. Однако механизм автоупаковки (Autoboxing) автоматически преобразует примитив в объектный тип. Следовательно программист может «забыть» про вышеупомянутое ограничение.
(ответ дан совместно с MrD)

11. 1. Создайте класс Fruit. Класс должен содержать поле int weight, конструктор с инициализацией этого поля и метод printWeight(), печатающий значение weight.
В методе main добавьте несколько объектов Fruit в контейнер List. Вызовите printWeight() для каждого из объектов следующими способами:
А) с помощью метода get();
Б) с помощью итератора.

11.2. Класс Fruit из 11.1 поместите в контейнер map. Пусть в качестве ключа будет указано имя владельца, в качестве значения – объект типа Fruit. Реализуйте перебор каждого объекта Fruit по ключу и вызов метода printWeight() для найденного объекта: с помощью foreach; с помощью iterator.

Спасибо quarantino за компактный вариант решения с итератором.
класс Fruit — см. задание 11.2

11.3. Используя Comparator для PriorityQueue обеспечьте сортировку строковых переменных по размеру.

Примечание: пример взят из интернета.

Перевод упражнений из оригинала книги:
11.4. Создайте новый класс Gerbil с полем int gerbilNumber. Пусть поле инициализируется конструктором. Создайте также метод hop(), который печатает «Gerbil’s number which is hopping is: » и значение переменной gerbilNumber. Разместите объекты Gerbil в контейнер ArrayList. Реализуйте метод get() для прохода по списку с вызовом метода hop() для каждого из этих объектов.

Читайте также:  Hdmi не на весь экран монитора

11.5. Модифицируйте SimpleCollection.java так, чтобы использовать метод Set для переменной «с». Модифицируйте innerclasses/Sequence.java таким образом, чтобы туда можно было бы добавлять любое количество элементов.

11.6. Напишите класс Generator, в котором есть список имен героев ваших любимых фильмов (объекты типа String). Пусть каждый объект этого списка возвращается посредством метода next(). При достижении конца созданного списка необходимо вернуться обратно в начало списка.
Используйте класс Generator для заполнения контейнеров типа ArrayList, LinkedList, HashSet, LinkedHashSet, TreeSet. Напишите универсальный метод, который выводил бы содержание каждого из массивов.

11.7. Модифицируйте ListFeatures.java таким образом, чтобы в нем использовались объекты типа Integers вместо объектов типа Pets. Объясните различия в результатах работы, возникшие из-за этой модификации.

11.8. Повторите упражнение 11.7 для ListFeatures.java, но замените Pets на Strings.

11.9. Создайте класс, который генерирует инициализированный массив объектов другого класса. С помощью этого массива заполните контейнер типа List. Создайте еще один контейнер, используя subList() для List. Затем удалите элементы, которые вы извлекли с помощью subList(), из контейнера, из которого вы их извлекали.

11.10. Шутливое упражнение на использование различных контейнеров и их методов (придумано самостоятельно)
Пусть у нас есть список из расходов, изначально состоящий из 3-х элементов: «food», «medicine», «entertainment». Необходимо записать эти элементы в контейнер List, причем порядок их следования не должен измениться.

1) Мы вдруг поняли, что забыли добавить в список расходы на выплату кредитов. Необходимо разместить запись «taxes» между «food» и «medicine» без использования индексов записей напрямую.
2) Жена притащила дополнительный отдельный список расходов с записями: «coat», «restaurant». Делать нечего: прибавить расходы в конец списка (чтобы не обольщалась).
3) Однако, теща притащила нам еще пару пунктиков: «theater», «home decoration» и «medicine». Может быть, какой-то из этих пунктов у Вас уже был. На всякий случай копируем содержание первого контейнера в новый контейнер типа Set и после, не задумываясь, добавляем эти пунктики в конец списка.
4) Не долго думая, мы создали ассоциативный динамический список расходов map , где Integer – планируемые затраты на каждый из пунктов расходов (суммы выбирайте самостоятельно).
5) Мы резко разбогатели решили увеличить сумму всех затрат на 30%. Напишите метод, который это сделает за вас.
6) Стоп! Довольно с нас «home decoration!» И, пожалуй, на coat уходит слишком много. Занесите эти пункты в новый List и передайте методу, который, считав этот лист, в контейнере Map отыщет соответствующие статьи расходов и уменьшит их на … 80%!
7) Свалим-ка часть расходов на тещу. Причем, сделаем ей сюрприз! Сгенерим два случайных числа, которые будут определять начальный и конечный индексы, все расходы между которыми будут записаны в отдельный список List (который впоследствии будет теще подсунут). Не забудем обновить Map, выкинув из него соответствующие статьи расходов.
8) Напишем метод, который определит, на что уходит самая малая сумма расходов, напечатаем название этих расходов и с гордостью удалим этот элемент из списка.
9) Однако, к нам подвалили дополнительные расходики: «food» и «restaurant», оформленные в виде очередного массива! Проверим, есть ли они в нашем списке эти пункты? И если хотя бы один расход есть, то ни в коем случае не будем их добавлять! Если же ничего этого нет, то (ничего не поделаешь), добавляем сразу оба эти пункта (как я проголодался!).
10) Мы сошли с ума! Прочитаем из списка Map все Integer суммы оставшихся у нас расходов, запишем их в «какой-нибудь» контейнер, который сам их нам рассортирует по возрастанию, потом в ярости перемешаем и удалим с проходом в обратном порядке, неистово применив для этого специальный итератор.

Читайте также:  Foto blob что это

99 Пожалуйста дождитесь своей очереди, идёт подготовка вашей ссылки для скачивания.

Скачивание начинается. Если скачивание не началось автоматически, пожалуйста нажмите на эту ссылку.

Описание книги "Философия Java3"

Описание и краткое содержание "Философия Java3" читать бесплатно онлайн.

БИБЛИОТЕКА ПРОГРАММИСТА

4-е издание

Москва — Санкт-Петербург — Нижний Новгород — Воронеж Ростов-на-Дону — Екатеринбург — Самара — Новосибирск Киев — Харьков — Минск

2009

ББК 32.973 2-018.1

Эккель Б.

Э38 Философия Java. Библиотека программиста. 4-е изд. — СПб.: Питер, 2009. — 640 е.: ил. — (Серия «Библиотека программиста»).

Java нельзя понять, взглянув на него только как на коллекцию некоторых харакюриешк, — необходимо понять задачи этого языка как частные задачи программирования в целом. r3ia книга — о проблемах программирования: почему они стали проблемами и какой подход использует Java в их решении. Поэтому обсуждаемые в каждой главе черты языка неразрывно связаны с тем, как они используются для решения определенных задач.

Эта книга, выдержавшая в оригинале не одно переиздание, благодаря глубокому и поистине философскому изложению тонкостей языка считается одним из лучших пособий для программирующих на Java.

ББК 32.973.2-018.1 УДК 004.3

Права на издание получены по соглашению с Prentice Hall PTR.

Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав.

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

ISBN 978-0131872486 (англ ) © Prentice Hall PTR, 2006

ISBN 978-5-388-00003-3 © Перевод на русский язык ООО «Питер Пресс», 2009

© Издание на русском языке, оформление ООО «Питер Пресс», 2009

Java SE5 и SE6. 14

Глава 1. Введение в объекты. 17

Развитие абстракции. . 18

Объект имеет интерфейс. 20

Объект предоставляет услуги. 22

Скрытая реализация. 23

Повторное использование реализации. 24

Взаимозаменяемые объекты и полиморфизм. 29

Однокорневая иерархия. 33

Параметризованные типы. 35

Создание, использование объектов и время их жизни. 36

Обработка исключений: борьба с ошибками. 38

Параллельное выполнение. 38

Java и Интернет. 39

Глава 2. Все является объектом. 48

Для работы с объектами используются ссылки. 48

Все объекты должны создаваться явно. 49

Объекты никогда не приходится удалять. 53

Создание новых типов данных. 54

Методы, аргументы и возвращаемые значения. 56

Читайте также:  Выйдет ли ведьмак 4 официальный сайт

Создание программы на Java. 58

Ключевое слово static. 60

Наша первая программа на Java. 61

Комментарии и встроенная документация. 64

Стиль оформления программ. 70

Глава 3. Операторы. 71

Простые команды печати. 71

Операторы Java. 72

В Java отсутствует sizeof(). 92

Глава 4. Управляющие конструкции. 101

Синтаксис foreach. 105

break и continue. 108

Нехорошая команда goto. 109

Глава 5. Инициализация и завершение. 116

Конструктор гарантирует инициализацию. 116

Перегрузка методов. 118

Очистка: финализация и сборка мусора. 130

Инициализация членов класса. 137

Инициализация конструктором. 140

Инициализация массивов. 146

Глава 6. Управление доступом. 152

Пакет как библиотечный модуль. 153

Спецификаторы доступа Java. 159

Интерфейс и реализация. 163

Доступ к классам. 164

Глава 7. Повторное использование классов. 169

Синтаксис композиции. 170

Синтаксис наследования. 172

Сочетание композиции и наследования. 178

Композиция в сравнении с наследованием. 184

Восходящее преобразование типов. 186

Ключевое слово final. 188

Инициализация и загрузка классов. 195

Глава 8. Полиморфизм. 198

Снова о восходящем преобразовании. . . >. 199

Конструкторы и полиморфизм. 208

Ковариантность возвращаемых типов. 216

Разработка с наследованием. 217

Глава 9. Интерфейсы. 221

Абстрактные классы и методы. 221

Отделение интерфейса от реализации. 227

Расширение интерфейса через наследование. 233

Интерфейсы как средство адаптации. 236

Вложенные интерфейсы. 239

Интерфейсы и фабрики. 242

Глава 10. Внутренние классы. 245

Создание внутренних классов. 245

Связь с внешним классом. 246

Конструкции .this и .new. 248

Внутренние классы и восходящее преобразование. 249

Безымянные внутренние классы. 253

Внутренние классы: зачем. 261

Наследование от внутренних классов. 272

Можно ли переопределить внутренний класс. 272

Локальные внутренние классы. 274

Глава 11. Коллекции объектов. 277

Параметризованные и типизованные контейнеры. 277

Основные концепции. 280

Добавление групп элементов. 281

Collection и Iterator. 301

Идиома «метод-адаптер». 306

Глава 12. Обработка ошибок и исключения. 310

Основные исключения. 310

Перехват исключений. 312

Создание собственных исключений. 314

Спецификации исключений. 319

Перехват произвольных исключений. 320

Стандартные исключения Java. 328

Завершение с помощью finally. 330

Использование finally с return. 334

Ограничения при использовании исключений. 336

Идентификация исключений. 343

Альтернативные решения. 344

Глава 13. Информация о типах. 352

Необходимость в динамическом определении типов (RTTI). 352

Регистрация фабрик. 372

Рефлексия: динамическая информация о классе. 376

Динамические посредники. 380

Объекты с неопределенным состоянием. 384

Интерфейсы и информация о типах. 390

Глава 14. Параметризация. 397

Простая параметризация. 398

Параметризованные интерфейсы. 404

Параметризованные методы. 407

Построение сложных моделей. 419

Глава 15. Массивы. 454

Особенности массивов. 454

Массив как объект. 456

Возврат массива. 458

Многомерные массивы. 460

Массивы и параметризация. 463

Создание тестовых данных. 465

Создание массивов с использованием генераторов. 470

Вспомогательный инструментарий Arrays. 474

Глава 16. Система ввода/вывода Java. 483

Ввод и вывод. 489

Добавление атрибутов и интерфейсов. 491

Классы Reader и Writer. 494

RandomAccessFile: сам по себе. 497

Типичное использование потоков ввода/вывода. 498

Средства чтения и записи файлов. 505

Похожие книги на "Философия Java3"

Книги похожие на "Философия Java3" читать онлайн или скачать бесплатно полные версии.

Оставьте ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *