- •Особенности языка Java
- •История Java
- •Характерные особенности Java
- •Разработка и выполнение Java приложения:
- •Понятие среды выполнения Java
- •Переносимость языка Java
- •Высокая производительность языка Java
- •Типы Java-приложений
- •Автономное (самостоятельное) приложение – application
- •Апплет – applet
- •Комбинированное приложение
- •Сервлет – servlet
- •Мидлет – midlet
- •Различия между автономными приложениями и апплетами
- •Автономное приложение
- •Апплет
- •Этапы жизненного цикла апплета
- •Этапы жизненного цикла в соответствии со стандартом Sun:
- •Этап инициализации
- •Этап запуска
- •Этап останова
- •Этап уничтожения
- •Этап рисования (перерисовки) окна апплета
- •Отличия Java от C++
- •Конструкторы классов
- •«Сборщик мусора»
- •Типы данных в Java
- •Простые типы
- •Ссылочные (объектные) типы
- •Строки в Java
- •Массивы в Java
- •Классы в Java
- •Особенности реализации
- •Пакеты
- •Управление доступом к элементам класса
- •Поля класса
- •Методы
- •Перегрузка и переопределение методов
- •Ключевые слова THIS и SUPER
- •Интерфейсы в Java
- •Понятие Java API
- •Пакеты ядра Java API (в JDK 1.0):
- •Развитие ядра Java API (в новой версии JDK и в Java 2)
- •Основные понятия AWT
- •Компоненты
- •Контейнеры
- •Компоновки. Менеджеры компоновки
- •События
- •События. Обработка событий
- •Иерархия классов-событий
- •Семантические события и их источники-компоненты AWT
- •Модель делегирования событий
- •Методы, объявленные в интерфейсах для семантических событий
- •Способы реализации блока прослушивания событий от AWT-компонента
- •Понятие класса-адаптера
- •Комбинированное приложение Java. Обработка события WindowEvent
- •Исключения в Java и их обработка
- •Иерархия классов исключений
- •Различия между исключениями Exception и ошибками Error
- •Организация обработки исключений в программе
- •Используемые операторы:
- •Как правильно организовывать обработку исключений
- •Понятия процесса и потока
- •Конструкторы класса Thread
- •Наиболее важные методы класса Thread
- •Способы создания потоков
- •Синхронизация потоков
- •Когда следует использовать синхронизацию потоков?
- •Механизм блокировки объекта
- •Способы использования ключевого слова synchronized
- •Синхронизированные методы
- •Оператор synchronized
- •Преимущества оператора synchronized:
- •Взаимодействие потоков: использование методов wait(), notify(), notifyAll()
- •Стандартные образцы кода использования методов
- •Поток-диспетчер событий AWT
- •Потоки и исключения
- •О группах потоков
- •Технология компонентного программирования JavaBeans
- •Понятие технологии компонентного программирования
- •Этап компиляции
- •Этап разработки
- •Этап создания приложения
- •Этап выполнения
- •Понятие компонентной модели
- •Основные требования к классам Bean-компонентов
- •Соглашения об именах
- •Соглашения об именах для свойств
- •Соглашения об именах для событий
- •Соглашения об именах для методов
- •Использование событий для управления свойствами
- •Связанные свойства
- •Преобразование обычного свойства в связанное
- •Ограниченные свойства
- •Преобразование обычного свойства в ограниченное
- •Ввод-вывод в Java: основные понятия
- •Основные группы классов и интерфейсов пакета java.io
- •Фильтрованные потоки
- •Буферизированные потоки
- •Принципы работы Buffered-потоков
- •Входные потоки
- •Выходные потоки
- •Канальные потоки
- •Синхронизация потоков данных
- •Понятие отражения (рефлексии)
- •Класс java.lang.Class
- •Классы пакета java.lang.reflect
- •Понятие интроспекции
- •Понятие сериализации
- •Обеспечение сериализуемости Bean
- •Выполнение базовой сериализации
- •Пример с сериализацией (см. SerializationDemo.java)
- •Настройка сериализации
- •Методы readObject и writeObject
- •Интерфейс Externalizable
- •Создание экземпляров сериализованных Bean
- •Приложение
- •// Файл HelloApplet.java
- •// Файл MyApplet.java
- •// Файл StringDemo.java
- •// Файл ConstrDemo.java
- •// Фрагменты файла AnimBallsPlus.java
Скачано с сайта http://ivc.clan.su
// в выражении условия ожидания notifyAll();// или notify();
}
Замечания:
1. Метод notifyAll() оповещает все потоки, находящиеся в состоянии ожидания, метод notify() — один поток.
Потоки могут ожидать выполнение условий (возможно, различных), относящихся к одному и тому же объекту. Если условия действительно различны, для оповещения всех ожидающих потоков всегда нужно использовать notifyAll(). В противном случае оповещение может попасть не к тому потоку, которому адресовано, и поток после проверки условия снова перейдёт в состояние ожидания, а заинтересованный поток вообще не получит оповещения.
При выполнении notify() выбрать единственный поток, который получит оповещение, нельзя. Этот метод следует применять, когда точно известно, какой поток и когда находится в состоянии ожидания.
2.Если при вызове notify()/notifyAll() отсутствуют потоки, находящиеся в состоянии ожидания, то посланное оповещение не запоминается.
Все рассмотренные методы могут вызываться только из синхронизированного кода при использовании блокировки соответствующего объекта. При попытке использовать методы объекта, право на блокировку которого отсутствует, генерируется исключение IllegalMonitorStateException. Методы notify()/notifyAll() вызываются из разных потоков на одном объекте!
Пример использования механизма взаимодействия потоков — см. BannerSuspension.java (1,2).
Поток-диспетчер событий AWT
Пакет AWT поддерживает графический интерфейс пользователя, управляемый событиями.
Когда пользователь выполняет действия с элементом интерфейса, исполняющая система AWT генерирует определенное событие. В объекте события фиксируется идентификатор события и ссылка на компонент-источник. Затем событие помещается в общую очередь событий, поддерживаемую
потоком-диспетчером событий.
Поток-диспетчер извлекает из очереди очередной объект события и отсылает его для обработки компоненту-источнику. Если для компонента-источника события зарегистрирован блок прослушивания
события, то действует следующий порядок прохождения события от очереди событий до выполнения обработки этого события:
1.Поток-диспетчер извлекает из очереди объект события.
2.Поток-диспетчер вызывает метод dispatchEvent(AWTEvent e) компонента-источника, которому в качестве параметра передаётся объект-событие. Таким образом, событие отсылается компонентуисточнику.
3.Метод dispatchEvent() вызывает метод processEvent().
4.Метод processEvent() обращается к методу process***Event(), где *** — тип события AWT.
5.Из метода process***Event() вызывается метод зарегистрированного для данного компонента блока прослушивания события.
6.В методе блока прослушивания и выполняется обработка события.
Для события PaintEvent не предусмотрены блоки прослушивания. PaintEvent не используется в модели делегирования событий.
В результате вызова в программе метода repaint() событие перерисовки типа PaintEvent с идентификатором UPDATE помещается в очередь событий.
Событие, переданное компоненту-источнику, заставляет его вызвать метод update(), из которого вызывается метод paint().
Чтобы гарантировать корректную обработку события PaintEvent для компонента AWT следует переопределить методы paint() или update().
32