Поделиться

В чем состоит философия Java вы получите ответ. ISBN 978-5-388-00003-3

Один из лучших учебников по Java.

Эккель Б. «Философия Java. Библиотека программиста» Питер, 2009 год, 640 стр. ил. (5,38 мб. djvu, 24,6 мб. pdf )

Философия Java сложилась, как совокупность свойств многих языков программирования создававшихся для выполнения определенных задач в определенной среде. Java выполняет задачи в любой системе и на любом устройстве, это стало возможным благодаря виртуальной среде исполнения кода, что кстати делает более гибкой безопасность при использовании этой среды. А использование JIT-технологии (динамической компиляции) на целевом CPU и операционной системе позволяют оптимизировать работу среды исполнения (виртуальной машины), что при постоянной работе приложения может даже дать прирост производительности.

Оригинал книги на английском языке выдержал не одно издание за проникновенное и принципиальное раскрытие всех деталей и тонкостей программирования на языке Java. «Философия Java» Эккеля считается одним из лучших пособий в этом направлении. Самым важным направлением применения этой платформы является клиент-серверные решения для сети Интернет. Java занял ту нишу которая не доступна языкам сценариев, таким к примеру, как JavaScript. Работа на стороне клиента обеспечивается специальными минипрограммами-аплетами, которые исполняются только в среде браузера и только тогда, когда это необходимо пользователю. Конкурентом на данный момент этой (не получившей широкого распространения) технологии выступает платформа .NET и язык C#, весьма удачное и популярное решение от Microsoft.

Наиболее сильной стороной Java является серверное программирование с помощью сервлетов решая проблемы несовместимости браузеров. Не стоит думать, что Java может успешно применяться только в WEB, это вполне полноценный и самостоятельный (благодаря своему предку C++) язык программирования имеющий большую стандартную библиотеку, устойчивость к ошибкам, он способен решать все задачи, которые решаются с помощью других языков программирования.

В Java в отличии от C и C++ не требуется использование особого синтаксиса, обращение ко всему, как к объекту с использованием единого синтаксиса. Автор книги «Философия Java» постарался добавить все нововведения Java SE5/6. Книга очень легко воспринимается и будет полезна для начинающих программистов, изучающих ООП.

В трех словах: Философия Java — Все является объектом.
ISBN 978-5-388-00003-3

Оглавление книги

Содержание

Предисловие 13
Java SE5 и SE6 14
Благодарности 14

Глава 1. Введение в объекты 17
Развитие абстракции 18
Объект имеет интерфейс 20
Объект предоставляет услуги 22
Скрытая реализация 23
Повторное использование реализации 24
Наследование 25
Взаимозаменяемые объекты и полиморфизм 29
Однокорневая иерархия 33
Контейнеры 33
Параметризованные типы 35
Создание, использование объектов и время их жизни 36
Обработка исключений: борьба с ошибками 38
Параллельное выполнение 38
Java и Интернет 39
Резюме 47

Глава 2. Все является объектом 48
Для работы с объектами используются ссылки 48
Все объекты должны создаваться явно 49
Объекты никогда не приходится удалять 53
Создание новых типов данных 54
Методы, аргументы и возвращаемые значения 56
Создание программы на Java 58
Ключевое слово static 60
Наша первая программа на Java 61
Комментарии и встроенная документация 64
Стиль оформления программ 70
Резюме 70

Глава 3. Операторы 71
Простые команды печати 71
Операторы Java 72
Литералы 82
В Java отсутствует sizeof() 92
Резюме 100

Глава 4. Управляющие конструкции 101
Синтаксис foreach 105
return 107
break и continue 108
Нехорошая команда goto 109
Резюме 115

Глава 5. Инициализация и завершение 116
Конструктор гарантирует инициализацию 116
Перегрузка методов 118
Очистка: финализация и сборка мусора 130
Инициализация членов класса 137
Инициализация конструктором 140
Инициализация массивов 146
Резюме 151

Глава 6. Управление доступом 152
Пакет как библиотечный модуль 153
Спецификаторы доступа Java 159
Интерфейс и реализация 163
Доступ к классам 164
Резюме 167

Глава 7. Повторное использование классов 169
Синтаксис композиции 170
Синтаксис наследования 172
Делегирование 176
Сочетание композиции и наследования 178
Композиция в сравнении с наследованием 184
protected 185
Восходящее преобразование типов 186
Ключевое слово final 188
Инициализация и загрузка классов 195
Резюме 197

Глава 8. Полиморфизм 198
Снова о восходящем преобразовании 199
Особенности 201
Конструкторы и полиморфизм 208
Ковариантность возвращаемых типов 216
Разработка с наследованием 217
Резюме 220

Глава 9. Интерфейсы 221
Абстрактные классы и методы 221
Интерфейсы 224
Отделение интерфейса от реализации 227
Расширение интерфейса через наследование 233
Интерфейсы как средство адаптации 236
Вложенные интерфейсы 239
Интерфейсы и фабрики. 242
Резюме 244

Глава 10. Внутренние классы 245
Создание внутренних классов 245
Связь с внешним классом 246
Конструкции .this и .new 248
Внутренние классы и восходящее преобразование 249
Безымянные внутренние классы 253
Внутренние классы: зачем? 261
Наследование от внутренних классов 272
Можно ли переопределить внутренний класс? 272
Локальные внутренние классы 274
Резюме 276

Глава 11. Коллекции объектов. 277
Параметризованные и типизованные контейнеры 277
Основные концепции 280
Добавление групп элементов 281
List 285
Итераторы 288
LinkedUst 291
Стек 292
Множество 294
Карта 296
Очередь 298
PriorityQueue 299
Collection и Iterator 301
Идиома «метод-адаптер» 306
Резюме 309

Глава 12. Обработка ошибок и исключения 310
Основные исключения 310
Перехват исключений 312
Создание собственных исключений 314
Спецификации исключений 319
Перехват произвольных исключений 320
Стандартные исключения Java 328
Завершение с помощью finally 330
Использование finally с return 334
Ограничения при использовании исключений 336
Конструкторы 339
Идентификация исключений 343
Альтернативные решения 344
Резюме 351

Глава 13. Информация о типах 352
Необходимость в динамическом определении типов (RTTI) 352
Регистрация фабрик 372
Рефлексия: динамическая информация о классе 376
Динамические посредники 380
Объекты с неопределенным состоянием 384
Интерфейсы и информация о типах 390
Резюме 394

Глава 14. Параметризация 397
Простая параметризация 398
Параметризованные интерфейсы 404
Параметризованные методы 407
Построение сложных моделей 419
Ограничения 437
Метасимволы 440
Резюме 452

Глава 15. Массивы 454
Особенности массивов 454
Массив как объект 456
Возврат массива 458
Многомерные массивы 460
Массивы и параметризация 463
Создание тестовых данных 465
Создание массивов с использованием генераторов 470
Вспомогательный инструментарий Arrays 474
Резюме 482

Глава 16. Система ввода/вывода Java 483
Класс File 484
Ввод и вывод 489
Добавление атрибутов и интерфейсов 491
Классы Reader и Writer 494
RandomAccessFile: сам по себе 497
Типичное использование потоков ввода/вывода 498
Средства чтения и записи файлов 505
Стандартный ввод/вывод 507
Новый ввод/вывод (nio 510
Сжатие данных 531
Сериализация объектов 536
Предпочтения 553
Резюме 555

Глава 17. Параллельное выполнение 557
Класс Thread 559
Исполнители 561
Совместное использование ресурсов 578
Взаимодействие между потоками 598
Взаимная блокировка 602
Новые библиотечные компоненты 607
CountDownLatch 607
CyclicBarrier 609
DelayQueue 611
PriorityBlockingQueue 614
Семафоры 619
Exchanger 623
Моделирование 624
Резюме 629
Алфавитный указатель 631

Скачать книгу бесплатно5,38 мб. djvu

 

Скачать книгу бесплатно24,6 мб. pdf

Философия Java 4-е издание

Брюс Эккель «Философия Java» Питер, 2015 год, 1170 стр., 4-е издание (57,7 мб. djvu)

Полное издание: ISBN: 978-5-496-01127-3

 

 

 

 

Оглавление книги 4-е издание

Глава 1. Введение в объекты
Развитие абстракции
Объект обладает интерфейсом
Объект предоставляет услуги
Скрытая реализация
Повторное использование реализации
Наследование
Отношение «является» в сравнении с «похоже»
Взаимозаменяемые объекты и полиморфизм
Однокорневая иерархия
Контейнеры
Параметризованные типы
Создание и время жизни объектов
Обработка исключений: борьба с ошибками
Параллельное выполнение
Java и Интернет
Что такое Web?
Вычисления «клиент—сервер»
Web как гигантский сервер
Программирование на стороне клиента
Модули расширения
Языки сценариев
Java
Альтернативы
.NET и C#
Интернет и интрасети
Программирование на стороне сервера
Резюме

Глава 2. Все является объектом
Для работы с объектами используются ссылки
Все объекты должны создаваться явно
Где хранятся данные
Особый случай: примитивные типы : .
Числа повышенной точности
Массивы в Java
Объекты никогда не приходится удалять
Ограничение области действия
Область действия объектов
Создание новых типов данных
Поля и методы
Значения по умолчанию для полей примитивных типов
Методы, аргументы и возвращаемые значения
Список аргументов
Создание программы на Java
Видимость имен
Использование внешних компонентов
Ключевое слово static
Ваша первая программа на Java
Компиляция и выполнение
Комментарии и встроенная документация
Документация в комментариях
Синтаксис
Встроенный HTML
Примеры тегов
©see: ссылка на другие классы
{@link пакет.класс#член_класса метка}
{@docRoot}
{@inheritDoc}
@version
@author
©since
@param
@return
@throws
@deprecated
Пример документации
Стиль оформления программ
Резюме
Упражнения

Глава 3. Операторы
Простые команды печати
Операторы Java
Приоритет
Присваивание
Совмещение имен во время вызова методов
Математические операторы
Унарные операторы плюс и минус
Автоувеличение и автоуменьшение
Операторы сравнения
Проверка объектов на равенство
Логические операторы
Ускоренное вычисление
Литералы
Экспоненциальная запись
Поразрядные операторы
Операторы сдвига
Тернарный оператор
Операторы + и += для String
Типичные ошибки при использовании операторов
Операторы приведения
Округление и усечение
Повышение
В Java отсутствует sizeof
Сводка операторов
Резюме

Глава 4. Управляющие конструкции
true и false :
if-else
Циклы
do-while
for
Оператор-запятая
Синтаксис foreach
return
break и continue
Нехорошая команда goto
switch
Резюме

Глава 5. Инициализация и завершение
Конструктор гарантирует инициализацию
Перегрузка методов
Различение перегруженных методов
Перегрузка с примитивами
Перегрузка по возвращаемым значениям
Конструкторы по умолчанию
Ключевое слово this
Вызов конструкторов из конструкторов
Значение ключевого слова static
Очистка: финализация и уборка мусора
Для чего нужен метод finalize()?
Очистка — ваш долг
Условие «готовности»
Как работает уборщик мусора
Инициализация членов класса
Явная инициализация
Инициализация конструктором
Порядок инициализации
Инициализация статических данных
Явная инициализация статических членов
Инициализация нестатических данных экземпляра
Инициализация массивов
Списки аргументов переменной длины
Перечисления
Резюме

Глава 6. Управление доступом
Пакет как библиотечный модуль
Структура кода
Создание уникальных имен пакетов
Конфликты имен
Пользовательские библиотеки
Использование импортирования для изменения поведения
Предостережение при работе с пакетами
Спецификаторы доступа Java
Доступ в пределах пакет
public
Пакет по умолчанию
private
protected
Интерфейс и реализация
Доступ к классам
Резюме

Глава 7. Повторное использование классов
Синтаксис композиции
Синтаксис наследования
Инициализация базового класса
Конструкторы с аргументами
Делегирование
Сочетание композиции и наследования
Обеспечение правильного завершения
Сокрытие имен
Композиция в сравнении с наследованием
protected
Восходящее преобразование типов
Почему «восходящее преобразование»
Снова о композиции с наследованием
Ключевое слово final
Неизменные данные
Пустые константы
Неизменные аргументы
Неизменные методы
Спецификаторы final и private
Неизменные классы
Предостережение
Инициализация и загрузка классов
Инициализация с наследованием
Резюме

Глава 8. Полиморфизм
Снова о восходящем преобразовании
Потеря типа объекта
Особенности
Связывание «метод-вызов»
Получение нужного результата
Расширяемость
Проблема: «переопределение» закрытых методов
Проблема: поля и статические методы
Конструкторы и полиморфизм
Порядок вызова конструкторов
Наследование и завершающие действия
Поведение полиморфных методов при вызове из конструкторов
Ковариантность возвращаемых типов
Наследование при проектировании
Нисходящее преобразование и динамическое определение типов
Резюме

Глава 9. Интерфейсы
Абстрактные классы и методы
Интерфейсы
Отделение интерфейса от реализации .
«Множественное наследование» в Java
Расширение интерфейса через наследование.
Конфликты имен при совмещении интерфейсов
Интерфейсы как средство адаптации
Поля в интерфейсах
Инициализация полей интерфейсов
Вложенные интерфейсы
Интерфейсы и фабрики
Резюме

Глава 10. Внутренние классы
Создание внутренних классов
Ссылка на внешний класс
.this и .new
Внутренние классы и восходящее преобразование .
Внутренние классы в методах и областях действия
Анонимные внутренние классы
Снова о паттерне «Фабричный метод»
Вложенные классы
Классы внутри интерфейсов :
Доступ вовне из многократно вложенных классов
Внутренние классы: зачем?
Замыкания и обратные вызовы
Внутренние классы и система управления
Наследование от внутренних классов
Можно ли переопределить внутренний класс?
Локальные внутренние классы
Идентификаторы внутренних классов
Резюме

Глава 11. Коллекции объектов
Обобщенные типы и классы, безопасные по отношению к типам
Основные концепции
Добавление групп элементов
Вывод контейнеров
List
Итераторы
Listlterator
LinkedList
Стек
Множество
Map
Очередь
PriorityQueue
Collection и Iterator
Foreach и итераторы
Идиома «Метод-Адаптер»
Резюме

Глава 12. Обработка ошибок и исключения
Основные концепции
Основные исключения
Аргументы исключения
Перехват исключений
Блок try
Обработчики исключений
Прерывание и возобновление
Создание собственных исключений
Вывод информации об исключениях
Спецификация исключений
Перехват любого типа исключения
Трассировка стека
Повторное возбуждение исключения .
Цепочки исключений
Стандартные исключения Java
Особый случай: RuntimeException
Завершение с помощью finally
Для чего нужен блок finally?
Использование finally при return
Ловушка: потерянное исключение
Ограничения исключений
Конструкторы
Отождествление исключений
Альтернативные решения
Предыстория
Перспективы
Передача исключений на консоль
Преобразование контролируемых исключений в неконтролируемые
Рекомендации по использованию исключений
Резюме

Глава 13. Строки
Постоянство строк
Перегрузка + и StringBuilder
Непреднамеренная рекурсия
Операции со строками
Форматирование вывода
printfQ
System.out.format()
Класс Formatter
Форматные спецификаторы
Преобразования Formatter
String.format()
Вывод файла в шестнадцатеричном виде
Регулярные выражения
Основы
Создание регулярных выражений
Квантификаторы
CharSequence
Pattern и Matcher
find()
Группы
start() и end()
Флаги шаблонов
split()
Операции замены
reset()
Регулярные выражения и ввод-вывод в Java
Сканирование ввода
Ограничители Scanner
Сканирование с использованием регулярных выражений
StringTokenizer
Резюме

Глава 14. Информация о типах
Необходимость в динамическом определении типов (RTTI)
Объект Class
Литералы class
Ссылки на обобщенные классы
Новый синтаксис приведения типа
Проверка перед приведением типов
Использование литералов class
Динамическая проверка типа
Рекурсивный подсчет
Зарегистрированные фабрики
instanceof и сравнение объектов Class
Отражение: динамическая информация о классе.
Извлечение информации о методах класса.
Динамические заместители
Null-объекты
Фиктивные объекты и заглушки
Интерфейсы и информация типов
Резюме

Глава 15. Обобщенные типы.
Сравнение с C++
Простые обобщения
Библиотека кортежей
Класс стека
RandomList
Обобщенные интерфейсы
Обобщенные методы
Использование автоматического определения аргументов-типов
Явное указание типа
Списки аргументов переменной длины и обобщенные методы
Обобщенный метод для использования с генераторами
Генератор общего назначения
Упрощение использования кортежей
Операции с множествами
Анонимные внутренние классы
Построение сложных моделей
Загадка стирания
Подход C++
Миграционная совместимость
Проблема стирания
Граничные ситуации
Компенсация стирания
Создание экземпляров типов
Массивы обобщений
Ограничения
Маски
Насколько умен компилятор?
Контравариантность
Неограниченные маски
Фиксация
Проблемы
Примитивы не могут использоваться как параметры-типы.
Реализация параметризованных интерфейсов
Приведения типа и предупреждения
Перегрузка
Перехват интерфейса базовым классом
Самоограничиваемые типы
Необычные рекурсивные обобщения
Самоограничение
Ковариантность аргументов
Динамическая безопасность типов
Исключения
Примеси
Примеси в C++
Примеси с использованием интерфейсов
Использование паттерна «Декоратор»
Примеси и динамические заместители
Латентная типизация
Компенсация отсутствия латентной типизации
Отражение
Применение метода к последовательности
Если нужный интерфейс отсутствует
Моделирование латентной типизации с использованием адаптеров
Использование объектов функций как стратегий
Резюме
Дополнительная литература

Глава 16. Массивы
Особое отношение к массивам
Массивы как полноценные объекты
Возврат массива
Многомерные массивы
Массивы и обобщения
Создание тестовых данных
Arrays.fill()
Генераторы данных
Применение генераторов для создания массивов
Класс Arrays
Копирование массива
Сравнение массивов
Сравнения элементов массивов
Сортировка массива
Поиск в отсортированном массиве
Резюме

Глава 17. Подробнее о контейнерах
Полная таксономия контейнеров
Заполнение контейнеров
Решение с Generator
Генераторы Мар
Использование классов Abstract
Функциональность Collection
Необязательные операции
Неподдерживаемые операции
Функциональность List
Set и порядок хранения
SortedSet
Очереди
Приоритетные очереди
Деки
Карты (Мар)
Производительность
SortedMap
LinkedHashMap
Хеширование и хеш-коды
Понимание hashCode()
Хеширование ради скорости
Переопределение hashCode()
Выбор реализации
Среда тестирования
Выбор List
Опасности микротестов
Выбор между множествами
Выбор между картами
Факторы, влияющие на производительность HashMap
Вспомогательные средства работы с коллекциями
Сортировка и поиск в списках
Получение неизменяемых коллекций и карт
Синхронизация коллекции или карты
Срочный отказ
Удержание ссылок
WeakHashMap
Контейнеры Java версий 1.0/1.1
Vector и Enumeration
Hashtable
Stack
BitSet
Резюме.

Глава 18. Система ввода-вывода Java
Класс File
Получение содержимого каталогов
Анонимные внутренние классы
Вспомогательные средства для работы с каталогами
Проверка и создание каталогов
Ввод и вывод
Типы InputStream
Типы OutputStream
Добавление атрибутов и интерфейсов
Чтение из InputStream с использованием FilterlnputStream
Запись в OutputStream с использованием FilterOutputStream
Классы Reader и Writer
Источники и приемники данных
Изменение поведения потока
Классы, оставленные без изменений
RandomAccessFile: сам по себе
Типичное использование потоков ввода-вывода
Буферизованное чтение из файла
Чтение из памяти
Форматированное чтение из памяти
Вывод в файл
Сокращенная запись для вывода в текстовые файлы
Сохранение и восстановление данных
Чтение/запись файлов с произвольным доступом
Каналы
Средства чтения и записи файлов
Чтение двоичных файлов
Стандартный ввод-вывод
Чтение из стандартного потока ввода
Замена System.out на PrintWriter
Перенаправление стандартного ввода-вывода
Управление процессами
Новый ввод-вывод (nio)
Преобразование данных
Извлечение примитивов
Представления буферов
Данные о двух концах
Буферы и манипуляция данными
Подробнее о буферах
Отображаемые в память файлы
Производительность
Блокировка файлов
Блокирование части отображаемого файла
Сжатие данных
Простое сжатие в формате GZIP
Многофайловые архивы ZIP
Архивы Java ARchives (файлы JAR)
Сериализация объектов
Поиск класса
Управление сериализацией
Ключевое слово transient
Альтернатива для Externalizable
Версии
Долговременное хранение
XML
Предпочтения
Резюме

Глава 19. Перечислимые типы
Основные возможности перечислений
Статическое импортирование и перечисления
Добавление методов к перечислению
Переопределение методов перечисления
Перечисления в командах switch
Странности values()
Реализация, а не наследование
Случайный выбор
Использование интерфейсов для организации кода
Использование EnumSet вместо флагов
Использование EnumMap
Методы констант
Цепочка обязанностей
Конечные автоматы
Множественная диспетчеризация
Диспетчеризация с использованием перечислений
Использование методов констант
Диспетчеризация с EnumMap
Использование двумерного массива
Резюме

Глава 20. Аннотации
Базовый синтаксис
Определение аннотаций
Мета-аннотации
Написание обработчиков аннотаций
Элементы аннотаций
Ограничения значений по умолчанию
Генерирование внешних файлов
Альтернативные решения
Аннотации не поддерживают наследование
Реализация обработчика
Использование apt для обработки аннотаций
Использование паттерна «Посетитель» с apt
Использование аннотаций при модульном тестировании
Использование @Unit с обобщениями
«Семейства» не нужны
Реализация @Unit
Удаление тестового кода
Резюме

Глава 21. Параллельное выполнение
Многогранная параллельность
Ускорение выполнения
Улучшение структуры кода
Основы построения многопоточных программ
Определение задач
Класс Thread
Использование Executor
Возвращение значений из задач
Ожидание
Приоритет
Уступки
Потоки-демоны
Разновидности реализации
Терминология
Присоединение к потоку
Чуткие пользовательские интерфейсы
Группы потоков
Перехват исключений
Совместное использование ресурсов
Некорректный доступ к ресурсам
Разрешение спора за разделяемые ресурсы
Синхронизация EvenGenerator
Использование объектов Lock
Атомарность и видимость изменений
Атомарные классы
Критические секции
Синхронизация по другим объектам
Локальная память потоков
Завершение задач
Завершение при блокировке
Состояния потока
Переход в блокированное состояние
Прерывание
Блокирование по мьютексу
Проверка прерывания
Взаимодействие между задачами
wait() и notifyА11()
Пропущенные сигналы
notify() и notifyА11()
Производители и потребители
Явное использование объектов Lock и Condition
Производители-потребители и очереди
Очередь BlockingQueue с элементами toast
Использование каналов для ввода-вывода между потоками
Взаимная блокировка
Новые библиотечные компоненты
CountDownLatch
Потоковая безопасность библиотеки
CyclicBarrier
DelayQueue
Priori tyBlockingQueue
Управление оранжереей на базе ScheduledExecutor
Semaphore
Exchanger
Моделирование
Модель кассира
Моделирование ресторана
Распределение работы
Оптимизация
Сравнение технологий мьютексов
Контейнеры без блокировок.
Вопросы производительности
Сравнение реализаций Мар
Оптимистическая блокировка
ReadWriteLock
Активные объекты
Резюме
Дополнительная литература

Глава 22. Графический интерфейс
Апплет
Основы Swing
Вспомогательный класс
Создание кнопки
Перехват событий
Текстовые области
Управление расположением компонентов
BorderLayout
FlowLayout
GridLayout
GridBagLayout
Абсолютное позиционирование
BoxLayout
Лучший вариант?
Модель событий библиотеки Swing
Типы событий и слушателей
Адаптеры слушателей упрощают задачу
Отслеживание нескольких событий
Компоненты Swing
Кнопки
Группы кнопок
Значки
Подсказки
Текстовые поля
Рамки
Мини-редактор
Флажки
Переключатели
Раскрывающиеся списки
Списки
Панель вкладок
Окна сообщений
Меню
Всплывающие меню
Рисование
Диалоговые окна
Диалоговые окна выбора файлов
HTML для компонентов Swing
Регуляторы и индикаторы выполнения
Выбор внешнего вида и поведения программы
Деревья, таблицы и буфер обмена
JNLP и Java Web Start
Параллельное выполнение и Swing
Продолжительные задачи
Визуальные потоки
Визуальное программирование и компоненты JavaBean
Что такое компонент JavaBean?
Получение информации о компоненте Bean: инструмент Introspector
Более сложный компонент Bean
Компоненты JavaBean и синхронизация
Упаковка компонента Bean
Поддержка более сложных компонентов Bean
Больше о компонентах Bean
Альтернативы для Swing
Построение веб-клиентов Flash с использованием Flex
Первое приложение Flex
Компилирование MXML
MXML и ActionScript
Контейнеры и элементы управления
Эффекты и стили
События
Связывание с Java
Модели данных и связывание данных
Построение и развертывание
Создание приложений SWT
Установка SWT
Первое приложение
Устранение избыточного кода
Меню
Вкладки, кнопки и события
Графика
Параллельное выполнение в SWT
SWT или Swing?
Резюме
Ресурсы

Приложение А
Приложения, доступные для загрузки
Thinking in С: Foundations for Java
Семинар «Разработка Объектов и Систем»

Приложение Б. Ресурсы
Программные средства
Редакторы и среды разработки
Книги
Анализ и планирование
Python
Список моих книг

Скачать 4-е издание бесплатно57,7 мб. djvu

 

Лекция по основам Java. Видео

Официальный сайт Java.

Викиучебник


Поделиться