- •Особенности языка 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
He все среды разработки допускают использование индексированных свойств.
•Соглашения об именах для событий
Компоненты JavaBeans используют модель делегирования событий. События, которые компонент
может генерировать и посылать другим компонентам, идентифицируются следующими методами: public void addTypeListener(TypeListener eventListener)
public void removeTypeListener(TypeListener eventListener)
где Type — тип события.
Если, например, в результате интроспекции выясняется наличие у компонента методов addActionListener() и removeActionListener(), то компоновщик предполагает, что компонент может генерировать событие типа ActionEvent.
Первый из указанных выше методов используется для регистрации блока прослушивания событий, когда нужно подтвердить заинтересованность в обработке событий определённого типа. Второй — для удаления блока прослушивания, когда больше нет необходимости принимать уведомления о событиях определённого типа от компонента.
•Соглашения об именах для методов
Все public-методы компонента JavaBeans доступны для использования средами визуального
проектирования. Protected- и privite-методы скрываются.
Использование событий для управления свойствами
События можно использовать для создания
•связанных свойств (bound properties);
•ограниченных свойств (constrained properties).
Связанные свойства
Bean-компонент, имеющий связанное свойство, генерирует событие изменения свойства (PropertyChangeEvent) при изменении значения свойства. Событие может быть передано другому компоненту и обработано.
Связанное свойство (свойства) идентифицируется в процессе интроспекции методами addPropertyChangeListener() и removePropertyChangeListener(). Визуальная среда, обнаружив эти методы, делает вывод о наличии у Bean-компонента связанных свойств и помещает событие типа PropertyChangeEvent в список событий, предоставляемый разработчику приложения и используемый для связывания компонентов.
В пакете java.beans имеются классы и интерфейсы, которые поддерживают возможность создания связанных свойств у Bean-компонентов.
• Класс PropertyChangeEvent — класс события изменения свойства.
Это класс события, производный от java.util.EventObject (от которого происходит также класс java.awt.AWTEvent). Объект события изменения свойства содержит:
ссылку на объект-источник события;
имя свойства;
его старое и новое значение.
В классе имеются методы для получения этой информации:
public String getPropertyName()
public Object getNewValue() public Object getOldValue()
37
Скачано с сайта http://ivc.clan.su
Событие генерируется, когда изменяется связанное свойство, и посылается объектам, которые зарегистрированы в качестве блоков прослушивания событий данного типа и реализуют интерфейс
PropertyChangeListener.
• Интерфейс PropertyChangeListener — интерфейс блока прослушивания событий изменения свойства. Содержит объявление метода, который должен быть реализован блоком прослушивания и
вызывается при изменении связанного свойства:
public void propertyChange(PropertyChangeEvent pce).
• Класс PropertyChangeSupport — класс, используемый Bean-компонентами, поддерживающими связанные свойства.
Объект PropertyChangeSupport помогает управлять списком зарегистрированных блоков прослушивания и уведомлять блоки прослушивания о событии изменения свойства.
Для этого класс имеет методы для регистрации блоков прослушивания (приёмников события изменения свойства), отмены регистрации и для запуска события изменения свойства, которое
предназначено зарегистрированным (добавленным в список) блокам прослушивания:
public void addPropertyChangeListener(PropertyChangeListener pcl) public void removePropertyChangeListener(PropertyChangeListener pcl) public void firePropertyChange(String propertyName, Object oldValue,
Object newValue)
Методы addPropertyChangeListener() и removePropertyChangeListener() класса Bean могут просто передавать запросы аналогичным методам в классе PropertyChangeSupport.
Преобразование обычного свойства в связанное
Пусть Bean-компонент имеет свойство типа int с именем X и соответствующий метод setter:
...
private int x;
public void setx(int newX)
{
x = newX;
}
Чтобы преобразовать свойство в связанное, необходимо выполнить следующее:
1.Добавить в класс Bean-компонента переменную типа PropertyChangeSupport и инициализировать ее:
private PropertyChangeSupport pcs = new PropertyChangeSupport(this);
2.Добавить в класс методы addPropertyChangeListener(PropertyChangeListener pcl) и removePropertyChangeListener(PropertyChangeListener pcl).
Эти методы определены в классе java.awt.Component, причем имеются версии для конкретного свойства:
addPropertyChangeListener (propertyName, PropertyChangeListener pcl) removePropertyChangeListener (propertyName,
PropertyChangeListener pcl)
В классе Bean-компонента данные методы могут просто вызывать одноименные методы объекта pcs:
public void addPropertyChangeListener(PropertyChangeListener pcl)
{
pcs.addPropertyChangeListener(pcl);
}
public void removePropertyChangeListener(PropertyChangeListener pcl)
{
38