Философия Java
Брюс Эккель
Впервые читатель может познакомиться с полной версией этого классического труда, который ранее на русском языке печатался в сокращении. Книга, выдержавшая в оригинале не одно переиздание, за глубокое и поистине философское изложение тонкостей языка Java считается одним из лучших пособий для программистов. Чтобы по-настоящему понять язык Java, необходимо рассматривать его не просто как набор неких команд и операторов, а понять его «философию», подход к решению задач, в сравнении с таковыми в других языках программирования. На этих страницах автор рассказывает об основных проблемах написания кода: в чем их природа и какой подход использует Java в их разрешении. Поэтому обсуждаемые в каждой главе черты языка неразрывно связаны с тем, как они используются для решения определенных задач.
Издательство: Питер, Серия: Классика Computer Science, 2015 г.
ISBN 978-5-496-01127-3, 978-0131872486
Количество страниц: 1168.
Содержание книги «Философия Java»:
- 25 Предисловие
- 26 Java SE5 и SE6
- 27 Java SE6
- 27 Четвертое издание
- 27 Изменения
- 29 Замечания о дизайне обложки
- 29 Благодарности
- 33 Введение
- 34 Предпосылки
- 34 Изучение Java
- 35 Цели
- 36 Обучение по материалам книги
- 36 HTML-документация JDK
- 37 Упражнения
- 37 Сопроводительные материалы
- 38 Исходные тексты программ
- 39 Стандарты оформления кода
- 39 Ошибки
- 40 Глава 1. Введение в объекты
- 41 Развитие абстракции
- 43 Объект обладает интерфейсом
- 45 Объект предоставляет услуги
- 46 Скрытая реализация
- 47 Повторное использование реализации
- 48 Наследование
- 51 Отношение «является» в сравнении с «похоже»
- 52 Взаимозаменяемые объекты и полиморфизм
- 55 Однокорневая иерархия
- 56 Контейнеры
- 57 Параметризованные типы
- 58 Создание и время жизни объектов
- 60 Обработка исключений: борьба с ошибками
- 61 Параллельное выполнение
- 62 Java и Интернет
- 62 Что такое Web?
- 62 Вычисления «клиент—сервер»
- 63 Web как гигантский сервер
- 63 Программирование на стороне клиента
- 64 Модули расширения
- 65 Языки сценариев
- 66 Java
- 66 Альтернативы
- 67 .NET и C#
- 67 Интернет и интрасети
- 68 Программирование на стороне сервера
- 69 Резюме
- 70 Глава 2. Все является объектом
- 70 Для работы с объектами используются ссылки
- 71 Все объекты должны создаваться явно
- 72 Где хранятся данные
- 73 Особый случай: примитивные типы
- 74 Числа повышенной точности
- 74 Массивы в Java
- 75 Объекты никогда не приходится удалять
- 75 Ограничение области действия
- 76 Область действия объектов
- 76 Создание новых типов данных
- 77 Поля и методы
- 78 Значения по умолчанию для полей примитивных типов
- 78 Методы, аргументы и возвращаемые значения
- 79 Список аргументов
- 80 Создание программы на Java
- 80 Видимость имен
- 81 Использование внешних компонентов
- 82 Ключевое слово static
- 83 Ваша первая программа на Java
- 85 Компиляция и выполнение
- 87 Комментарии и встроенная документация
- 87 Документация в комментариях
- 88 Синтаксис
- 88 Встроенный HTML
- 89 Примеры тегов
- 89 @see: ссылка на другие классы
- 89 {@link пакет.класс#член_класса метка}
- 90 {@docRoot}
- 90 {@inheritDoc}
- 90 @version
- 90 @author
- 90 @since
- 90 @param
- 90 @return
- 91 @throws
- 91 @deprecated
- 91 Пример документации
- 92 Стиль оформления программ
- 92 Резюме
- 93 Упражнения
- 95 Глава 3. Операторы
- 95 Простые команды печати
- 96 Операторы Java
- 96 Приоритет
- 97 Присваивание
- 98 Совмещение имен во время вызова методов
- 99 Математические операторы
- 101 Унарные операторы плюс и минус
- 101 Автоувеличение и автоуменьшение
- 103 Операторы сравнения
- 103 Проверка объектов на равенство
- 104 Логические операторы
- 105 Ускоренное вычисление
- 106 Литералы
- 108 Экспоненциальная запись
- 109 Поразрядные операторы
- 110 Операторы сдвига
- 113 Тернарный оператор
- 114 Операторы + и += для String
- 115 Типичные ошибки при использовании операторов
- 116 Операторы приведения
- 117 Округление и усечение
- 118 Повышение
- 118 В Java отсутствует sizeof
- 118 Сводка операторов
- 126 Резюме
- 127 Глава 4. Управляющие конструкции
- 127 true и false
- 127 if-else
- 128 Циклы
- 129 do-while
- 129 for
- 131 Оператор-запятая
- 131 Синтаксис foreach
- 133 return
- 134 break и continue
- 136 Нехорошая команда goto
- 140 switch
- 142 Резюме
- 143 Глава 5. Инициализация и завершение
- 143 Конструктор гарантирует инициализацию
- 145 Перегрузка методов
- 147 Различение перегруженных методов
- 148 Перегрузка с примитивами
- 151 Перегрузка по возвращаемым значениям
- 152 Конструкторы по умолчанию
- 153 Ключевое слово this
- 155 Вызов конструкторов из конструкторов
- 156 Значение ключевого слова static
- 157 Очистка: финализация и уборка мусора
- 158 Для чего нужен метод finalize()?
- 159 Очистка — ваш долг
- 159 Условие «готовности»
- 161 Как работает уборщик мусора
- 164 Инициализация членов класса
- 165 Явная инициализация
- 167 Инициализация конструктором
- 167 Порядок инициализации
- 168 Инициализация статических данных
- 171 Явная инициализация статических членов
- 172 Инициализация нестатических данных экземпляра
- 173 Инициализация массивов
- 177 Списки аргументов переменной длины
- 182 Перечисления
- 184 Резюме
- 186 Глава 6. Управление доступом
- 187 Пакет как библиотечный модуль
- 188 Структура кода
- 190 Создание уникальных имен пакетов
- 192 Конфликты имен
- 193 Пользовательские библиотеки
- 194 Использование импортирования для изменения поведения
- 195 Предостережение при работе с пакетами
- 195 Спецификаторы доступа Java
- 195 Доступ в пределах пакета
- 196 public
- 197 Пакет по умолчанию
- 197 private
- 198 protected
- 200 Интерфейс и реализация
- 201 Доступ к классам
- 205 Резюме
- 187 Пакет как библиотечный модуль
- 206 Глава 7. Повторное использование классов
- 206 Синтаксис композиции
- 209 Синтаксис наследования
- 211 Инициализация базового класса
- 212 Конструкторы с аргументами
- 211 Инициализация базового класса
- 214 Делегирование
- 215 Сочетание композиции и наследования
- 217 Обеспечение правильного завершения
- 220 Сокрытие имен
- 221 Композиция в сравнении с наследованием
- 222 protected
- 224 Восходящее преобразование типов
- 224 Почему «восходящее преобразование»?
- 225 Снова о композиции с наследованием
- 224 Почему «восходящее преобразование»?
- 226 Ключевое слово final
- 226 Неизменные данные
- 228 Пустые константы
- 229 Неизменные аргументы
- 229 Неизменные методы
- 230 Спецификаторы final и private
- 231 Неизменные классы
- 232 Предостережение
- 226 Неизменные данные
- 233 Инициализация и загрузка классов
- 234 Инициализация с наследованием
- 235 Резюме
- 237 Глава 8. Полиморфизм
- 238 Снова о восходящем преобразовании
- 239 Потеря типа объекта
- 240 Особенности
- 240 Связывание «метод-вызов»
- 241 Получение нужного результата
- 244 Расширяемость
- 247 Проблема: «переопределение» закрытых методов
- 248 Проблема: поля и статические методы
- 249 Конструкторы и полиморфизм
- 249 Порядок вызова конструкторов
- 251 Наследование и завершающие действия
- 256 Поведение полиморфных методов при вызове из конструкторов
- 258 Ковариантность возвращаемых типов
- 259 Наследование при проектировании
- 260 Нисходящее преобразование и динамическое определение типов
- 261 Резюме
- 238 Снова о восходящем преобразовании
- 263 Глава 9. Интерфейсы
- 263 Абстрактные классы и методы
- 266 Интерфейсы
- 270 Отделение интерфейса от реализации
- 274 «Множественное наследование» в Java
- 276 Расширение интерфейса через наследование
- 278 Конфликты имен при совмещении интерфейсов
- 279 Интерфейсы как средство адаптации
- 281 Поля в интерфейсах
- 281 Инициализация полей интерфейсов
- 282 Вложенные интерфейсы
- 285 Интерфейсы и фабрики
- 287 Резюме
- 288 Глава 10. Внутренние классы
- 288 Создание внутренних классов
- 290 Ссылка на внешний класс
- 292 .this и .new
- 293 Внутренние классы и восходящее преобразование
- 295 Внутренние классы в методах и областях действия
- 297 Анонимные внутренние классы
- 301 Снова о паттерне «Фабричный метод»
- 303 Вложенные классы
- 305 Классы внутри интерфейсов
- 306 Доступ вовне из многократно вложенных классов
- 306 Внутренние классы: зачем?
- 309 Замыкания и обратные вызовы
- 311 Внутренние классы и система управления
- 317 Наследование от внутренних классов
- 318 Можно ли переопределить внутренний класс?
- 319 Локальные внутренние классы
- 321 Идентификаторы внутренних классов
- 322 Резюме
- 288 Создание внутренних классов
- 323 Глава 11. Коллекции объектов
- 324 Обобщенные типы и классы, безопасные по отношению к типам
- 327 Основные концепции
- 329 Добавление групп элементов
- 330 Вывод контейнеров
- 333 List
- 336 Итераторы
- 339 ListIterator
- 340 LinkedList
- 341 Стек
- 343 Множество
- 346 Map
- 350 Очередь
- 351 PriorityQueue
- 353 Collection и Iterator
- 356 Foreach и итераторы
- 358 Идиома «Метод-Адаптер»
- 361 Резюме
- 365 Глава 12. Обработка ошибок и исключения
- 365 Основные концепции
- 366 Основные исключения
- 368 Аргументы исключения
- 369 Перехват исключений
- 369 Блок try
- 369 Обработчики исключений
- 370 Прерывание и возобновление
- 370 Создание собственных исключений
- 373 Вывод информации об исключениях
- 376 Спецификация исключений
- 377 Перехват любого типа исключения
- 379 Трассировка стека
- 379 Повторное возбуждение исключения
- 382 Цепочки исключений
- 385 Стандартные исключения Java
- 386 Особый случай: RuntimeException
- 387 Завершение с помощью finally
- 389 Для чего нужен блок finally?
- 391 Использование finally при return
- 392 Ловушка: потерянное исключение
- 394 Ограничения исключений
- 397 Конструкторы
- 402 Отождествление исключений
- 403 Альтернативные решения
- 404 Предыстория
- 406 Перспективы
- 408 Передача исключений на консоль
- 408 Преобразование контролируемых исключений в неконтролируемые
- 411 Рекомендации по использованию исключений
- 411 Резюме
- 413 Глава 13. Строки
- 413 Постоянcтво строк
- 414 Перегрузка + и StringBuilder
- 418 Непреднамеренная рекурсия
- 419 Операции со строками
- 421 Форматирование вывода
- 421 printf()
- 422 System.out.format()
- 422 Класс Formatter
- 423 Форматные спецификаторы
- 425 Преобразования Formatter
- 427 String.format()
- 428 Вывод файла в шестнадцатеричном виде
- 429 Регулярные выражения
- 429 Основы
- 432 Создание регулярных выражений
- 433 Квантификаторы
- 434 CharSequence
- 434 Pattern и Matcher
- 436 find()
- 437 Группы
- 438 start() и end()
- 440 Флаги шаблонов
- 442 split()
- 442 Операции замены
- 444 reset()
- 445 Регулярные выражения и ввод-вывод в Java
- 446 Сканирование ввода
- 448 Ограничители Scanner
- 449 Сканирование с использованием регулярных выражений
- 450 StringTokenizer
- 450 Резюме
- 451 Глава 14. Информация о типах
- 451 Необходимость в динамическом определении типов (RTTI)
- 454 Объект Class
- 459 Литералы class
- 461 Ссылки на обобщенные классы
- 463 Новый синтаксис приведения типа
- 464 Проверка перед приведением типов
- 470 Использование литералов class
- 472 Динамическая проверка типа
- 473 Рекурсивный подсчет
- 454 Объект Class
- 475 Зарегистрированные фабрики
- 478 instanceof и сравнение объектов Class
- 479 Отражение: динамическая информация о классе
- 480 Извлечение информации о методах класса
- 483 Динамические заместители
- 487 Null-объекты
- 493 Фиктивные объекты и заглушки
- 494 Интерфейсы и информация типов
- 499 Резюме
- 451 Необходимость в динамическом определении типов (RTTI)
- 501 Глава 15. Обобщенные типы
- 502 Сравнение с C++
- 503 Простые обобщения
- 504 Библиотека кортежей
- 507 Класс стека
- 508 RandomList
- 509 Обобщенные интерфейсы
- 512 Обобщенные методы
- 513 Использование автоматического определения аргументов-типов
- 515 Явное указание типа
- 515 Списки аргументов переменной длины и обобщенные методы
- 516 Обобщенный метод для использования с генераторами
- 517 Генератор общего назначения
- 518 Упрощение использования кортежей
- 520 Операции с множествами
- 523 Анонимные внутренние классы
- 524 Построение сложных моделей
- 526 Загадка стирания
- 528 Подход C++
- 530 Миграционная совместимость
- 531 Проблема стирания
- 533 Граничные ситуации
- 536 Компенсация стирания
- 537 Создание экземпляров типов
- 540 Массивы обобщений
- 544 Ограничения
- 548 Маски
- 550 Насколько умен компилятор?
- 552 Контравариантность
- 555 Неограниченные маски
- 560 Фиксация
- 561 Проблемы
- 561 Примитивы не могут использоваться как параметры-типы
- 563 Реализация параметризованных интерфейсов
- 563 Приведения типа и предупреждения
- 565 Перегрузка
- 566 Перехват интерфейса базовым классом
- 567 Самоограничиваемые типы
- 567 Необычные рекурсивные обобщения
- 568 Самоограничение
- 570 Ковариантность аргументов
- 573 Динамическая безопасность типов
- 574 Исключения
- 576 Примеси
- 576 Примеси в C++
- 577 Примеси с использованием интерфейсов
- 579 Использование паттерна «Декоратор»
- 580 Примеси и динамические заместители
- 582 Латентная типизация
- 586 Компенсация отсутствия латентной типизации
- 586 Отражение
- 587 Применение метода к последовательности
- 590 Если нужный интерфейс отсутствует
- 591 Моделирование латентной типизации с использованием адаптеров
- 594 Использование объектов функций как стратегий
- 599 Резюме
- 601 Дополнительная литература
- 602 Глава 16. Массивы
- 602 Особое отношение к массивам
- 604 Массивы как полноценные объекты
- 607 Возврат массива
- 608 Многомерные массивы
- 612 Массивы и обобщения
- 614 Создание тестовых данных
- 614 Arrays.fill()
- 615 Генераторы данных
- 620 Применение генераторов для создания массивов
- 624 Класс Arrays
- 624 Копирование массива
- 625 Сравнение массивов
- 626 Сравнения элементов массивов
- 630 Сортировка массива
- 631 Поиск в отсортированном массиве
- 633 Резюме
- 636 Глава 17. Подробнее о контейнерах
- 636 Полная таксономия контейнеров
- 637 Заполнение контейнеров
- 638 Решение с Generator
- 640 Генераторы Map
- 643 Использование классов Abstract
- 650 Функциональность Collection
- 653 Необязательные операции
- 654 Неподдерживаемые операции
- 656 Функциональность List
- 659 Set и порядок хранения
- 663 SortedSet
- 664 Очереди
- 665 Приоритетные очереди
- 666 Деки
- 667 Карты (Map)
- 669 Производительность
- 672 SortedMap
- 673 LinkedHashMap
- 674 Хеширование и хеш-коды
- 677 Понимание hashCode()
- 680 Хеширование ради скорости
- 683 Переопределение hashCode()
- 688 Выбор реализации
- 689 Среда тестирования
- 693 Выбор List
- 698 Опасности микротестов
- 700 Выбор между множествами
- 701 Выбор между картами
- 704 Факторы, влияющие на производительность HashMap
- 705 Вспомогательные средства работы с коллекциями
- 708 Сортировка и поиск в списках
- 710 Получение неизменяемых коллекций и карт
- 711 Синхронизация коллекции или карты
- 712 Срочный отказ
- 713 Удержание ссылок
- 715 WeakHashMap
- 716 Контейнеры Java версий 1.0/1.1
- 716 Vector и Enumeration
- 717 Hashtable
- 717 Stack
- 719 BitSet
- 721 Резюме
- 636 Полная таксономия контейнеров
- 723 Глава 18. Система ввода-вывода Java
- 724 Класс File
- 724 Получение содержимого каталогов
- 725 Анонимные внутренние классы
- 727 Вспомогательные средства для работы с каталогами
- 732 Проверка и создание каталогов
- 734 Ввод и вывод
- 734 Типы InputStream
- 736 Типы OutputStream
- 737 Добавление атрибутов и интерфейсов
- 737 Чтение из InputStream с использованием FilterInputStream
- 738 Запись в OutputStream с использованием FilterOutputStream
- 739 Классы Reader и Writer
- 740 Источники и приемники данных
- 741 Изменение поведения потока
- 742 Классы, оставленные без изменений
- 742 RandomAccessFile: сам по себе
- 743 Типичное использование потоков ввода-вывода
- 743 Буферизованное чтение из файла
- 745 Чтение из памяти
- 745 Форматированное чтение из памяти
- 746 Вывод в файл
- 747 Сокращенная запись для вывода в текстовые файлы
- 748 Сохранение и восстановление данных
- 749 Чтение/запись файлов с произвольным доступом
- 751 Каналы
- 751 Средства чтения и записи файлов
- 754 Чтение двоичных файлов
- 755 Стандартный ввод-вывод
- 755 Чтение из стандартного потока ввода
- 756 Замена System.out на PrintWriter
- 756 Перенаправление стандартного ввода-вывода
- 757 Управление процессами
- 759 Новый ввод-вывод (nio)
- 762 Преобразование данных
- 765 Извлечение примитивов
- 766 Представления буферов
- 769 Данные о двух концах
- 770 Буферы и манипуляция данными
- 770 Подробнее о буферах
- 774 Отображаемые в память файлы
- 775 Производительность
- 778 Блокировка файлов
- 779 Блокирование части отображаемого файла
- 780 Сжатие данных
- 781 Простое сжатие в формате GZIP
- 782 Многофайловые архивы ZIP
- 784 Архивы Java ARchives (файлы JAR)
- 786 Сериализация объектов
- 790 Поиск класса
- 791 Управление сериализацией
- 795 Ключевое слово transient
- 796 Альтернатива для Externalizable
- 799 Версии
- 799 Долговременное хранение
- 805 XML
- 807 Предпочтения
- 809 Резюме
- 724 Класс File
- 811 Глава 19. Перечислимые типы
- 811 Основные возможности перечислений
- 812 Статическое импортирование и перечисления
- 813 Добавление методов к перечислению
- 814 Переопределение методов перечисления
- 815 Перечисления в командах switch
- 816 Странности values()
- 818 Реализация, а не наследование
- 819 Случайный выбор
- 820 Использование интерфейсов для организации кода
- 824 Использование EnumSet вместо флагов
- 826 Использование EnumMap
- 828 Методы констант
- 831 Цепочка обязанностей
- 835 Конечные автоматы
- 839 Множественная диспетчеризация
- 842 Диспетчеризация с использованием перечислений
- 844 Использование методов констант
- 846 Диспетчеризация с EnumMap
- 846 Использование двумерного массива
- 847 Резюме
- 811 Основные возможности перечислений
- 849 Глава 20. Аннотации
- 850 Базовый синтаксис
- 850 Определение аннотаций
- 852 Мета-аннотации
- 853 Написание обработчиков аннотаций
- 854 Элементы аннотаций
- 854 Ограничения значений по умолчанию
- 854 Генерирование внешних файлов
- 857 Альтернативные решения
- 858 Аннотации не поддерживают наследование
- 858 Реализация обработчика
- 861 Использование apt для обработки аннотаций
- 865 Использование паттерна «Посетитель» с apt
- 868 Использование аннотаций при модульном тестировании
- 876 Использование @Unit с обобщениями
- 877 «Семейства» не нужны
- 877 Реализация @Unit
- 883 Удаление тестового кода
- 885 Резюме
- 850 Базовый синтаксис
- 887 Глава 21. Параллельное выполнение
- 889 Многогранная параллельность
- 889 Ускорение выполнения
- 891 Улучшение структуры кода
- 893 Основы построения многопоточных программ
- 893 Определение задач
- 895 Класс Thread
- 896 Использование Executor
- 899 Возвращение значений из задач
- 900 Ожидание
- 902 Приоритет
- 904 Уступки
- 904 Потоки-демоны
- 908 Разновидности реализации
- 913 Терминология
- 914 Присоединение к потоку
- 915 Чуткие пользовательские интерфейсы
- 916 Группы потоков
- 917 Перехват исключений
- 919 Совместное использование ресурсов
- 920 Некорректный доступ к ресурсам
- 922 Разрешение спора за разделяемые ресурсы
- 925 Синхронизация EvenGenerator
- 925 Использование объектов Lock
- 928 Атомарность и видимость изменений
- 934 Атомарные классы
- 935 Критические секции
- 940 Синхронизация по другим объектам
- 941 Локальная память потоков
- 943 Завершение задач
- 946 Завершение при блокировке
- 946 Состояния потока
- 947 Переход в блокированное состояние
- 947 Прерывание
- 952 Блокирование по мьютексу
- 954 Проверка прерывания
- 957 Взаимодействие между задачами
- 958 wait() и notifyAll()
- 962 Пропущенные сигналы
- 963 notify() и notifyAll()
- 965 Производители и потребители
- 969 Явное использование объектов Lock и Condition
- 971 Производители-потребители и очереди
- 973 Очередь BlockingQueue с элементами toast
- 975 Использование каналов для ввода-вывода между потоками
- 977 Взаимная блокировка
- 982 Новые библиотечные компоненты
- 983 CountDownLatch
- 984 Потоковая безопасность библиотеки
- 985 CyclicBarrier
- 987 DelayQueue
- 989 PriorityBlockingQueue
- 992 Управление оранжереей на базе ScheduledExecutor
- 995 Semaphore
- 998 Exchanger
- 1000 Моделирование
- 1000 Модель кассира
- 1005 Моделирование ресторана
- 1009 Распределение работы
- 1014 Оптимизация
- 1014 Сравнение технологий мьютексов
- 1021 Контейнеры без блокировок
- 1022 Вопросы производительности
- 1026 Сравнение реализаций Map
- 1028 Оптимистическая блокировка
- 1030 ReadWriteLock
- 1032 Активные объекты
- 1036 Резюме
- 1038 Дополнительная литература
- 889 Многогранная параллельность
- 1039 Глава 22. Графический интерфейс
- 1041 Апплет
- 1042 Основы Swing
- 1044 Вспомогательный класс
- 1045 Создание кнопки
- 1046 Перехват событий
- 1048 Текстовые области
- 1050 Управление расположением компонентов
- 1050 BorderLayout
- 1051 FlowLayout
- 1052 GridLayout
- 1053 GridBagLayout
- 1053 Абсолютное позиционирование
- 1053 BoxLayout
- 1054 Лучший вариант?
- 1054 Модель событий библиотеки Swing
- 1055 Типы событий и слушателей
- 1060 Адаптеры слушателей упрощают задачу
- 1061 Отслеживание нескольких событий
- 1055 Типы событий и слушателей
- 1063 Компоненты Swing
- 1064 Кнопки
- 1064 Группы кнопок
- 1066 Значки
- 1067 Подсказки
- 1068 Текстовые поля
- 1069 Рамки
- 1070 Мини-редактор
- 1071 Флажки
- 1073 Переключатели
- 1074 Раскрывающиеся списки
- 1075 Списки
- 1076 Панель вкладок
- 1077 Окна сообщений
- 1079 Меню
- 1084 Всплывающие меню
- 1085 Рисование
- 1089 Диалоговые окна
- 1092 Диалоговые окна выбора файлов
- 1094 HTML для компонентов Swing
- 1095 Регуляторы и индикаторы выполнения
- 1096 Выбор внешнего вида и поведения программы
- 1098 Деревья, таблицы и буфер обмена
- 1064 Кнопки
- 1098 JNLP и Java Web Start
- 1103 Параллельное выполнение и Swing
- 1103 Продолжительные задачи
- 1110 Визуальные потоки
- 1112 Визуальное программирование и компоненты JavaBean
- 1113 Что такое компонент JavaBean?
- 1115 Получение информации о компоненте Bean: инструмент Introspector
- 1120 Более сложный компонент Bean
- 1123 Компоненты JavaBean и синхронизация
- 1127 Упаковка компонента Bean
- 1128 Поддержка более сложных компонентов Bean
- 1129 Больше о компонентах Bean
- 1129 Альтернативы для Swing
- 1130 Построение веб-клиентов Flash с использованием Flex
- 1131 Первое приложение Flex
- 1132 Компилирование MXML
- 1133 MXML и ActionScript
- 1133 Контейнеры и элементы управления
- 1135 Эффекты и стили
- 1136 События
- 1136 Связывание с Java
- 1139 Модели данных и связывание данных
- 1140 Построение и развертывание
- 1141 Создание приложений SWT
- 1142 Установка SWT
- 1142 Первое приложение
- 1145 Устранение избыточного кода
- 1146 Меню
- 1147 Вкладки, кнопки и события
- 1151 Графика
- 1152 Параллельное выполнение в SWT
- 1155 SWT или Swing?
- 1155 Резюме
- 1156 Ресурсы
- 1157 Приложение А
- 1157 Приложения, доступные для загрузки
- 1157 Thinking in C: Foundations for Java
- 1158 Семинар «Разработка Объектов и Систем»
- 1159 Приложение Б. Ресурсы
- 1159 Программные средства
- 1159 Редакторы и среды разработки
- 1160 Книги
- 1161 Анализ и планирование
- 1163 Python
- 1164 Список моих книг
Инструкция как скачать книгу Брюс Эккель: Философия Java в форматах DjVu, PDF, DOC или fb2 совершенно бесплатно.