- •Особенности языка 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
Для правильной сериализации объекта нужно, чтобы любые объекты, ссылки на которые содержатся в классе, сами были сериализуемыми, т.е. сериализуемым должен быть граф объекта.
Имеется в виду, что когда содержимое объекта выводится в поток, в потоке сохраняются наборы байтов, представляющие и данный объект, и все другие объекты, на который тот ссылается и т.д. (графы могут быть многоуровневыми).
Сериализуемыми являются такие широко используемые классы Java как классы-оболочки простых типов; классы строк; классы исключений;
AWT-классы и многие другие.
Есть и несериализуемые классы (например, входные и выходные потоки данных, сетевые разъемы и пр.)
Схема сериализации объектов Java достаточно устойчива и распознаёт циклы, множественные ссылки, а также сериализует объект только один раз, даже если на этот объект имеется множество ссылок.
Тем не менее, могут возникнуть проблемы, если где-либо в графе есть ссылки на несериализуемый объект. В этом случае при попытке записать объект в поток будет сгенерировано исключение java.io.NotSerializableException. Большинство классов в пакетах Java имеет сериализуемые графы, если они реализуют интерфейс Serializable (за исключением классов-контейнеров, например
Hashtable и Vector).
Распространенная ошибка разработчиков Bean-компонентов заключается в том, что они забывают сделать сериализуемыми внутренние классы. Это препятствует сериализации не только внутреннего, но и внешнего класса, если он содержит ссылку на внутренний. Данная проблема особенно актуальна для Bean, содержащих один и более внутренних классовблоков прослушивания для обработки событий. (Об этом см. также в примере BeanlnstantiateDemo.java, демонстрирующем создание экземпляра сериализованного Bean.)
Ключевое слово transient (нестационарный) используется для идентификации поля в классе Java, которое не должно быть сериализовано. Обычно это поле, которое не описывает состояния объекта. Это может быть поле, которое изменяется при десериализации объекта (например: поле, сохраняющее время начала выполнения программы), или любое поле для временного хранения данных, используемое как внутренняя переменная.
Выполнение базовой сериализации
Сериализация управляется байтовыми потоками типа Object. Ими являются экземпляры
соответствующих классов в java.io: ObjectlnputStream и ObjectOutputStream. public class ObjectOutputStream extends OutputStream
implements ObjectOutput
public class ObjectlnputStream extends InputStream implements Objectlnput
Метод интерфейса java.io.ObjectOutput writeObject(), реализованный в классе ObjectOutputStream, обеспечивает сериализацию объектов. Если имеется ссылка oos на объект выходного потока ObjectOutputStream, то объект, подлежащий сериализации, передается этому методу, вызываемому для
объекта, в качестве параметра: oos.writeObject(x);
Здесь х - это ссылка на сериализуемый объект. Тип х не имеет значения. Объект может быть экземпляром любого класса, реализующего интерфейс java.io.Serializable.
Например:
FileOutputStream fos = newFileOutputStream("today.ser");
49