
- •30.Общее представление о потоках ввода/вывода
- •31.Байтовые и символьные потоки
- •32. Определение файла. Тестирование проверка объектов File
- •34. Сериализация
- •35. Обработка исключений в Java
- •36. Многопоточное программирование
- •37. Создание потока и его жизненный цикл
- •38. Управление приоритетами и ThreadGroup
- •39. Потоки-демоны
- •40. Методы synchronized
- •41. Коллекции
- •42. Списки
- •43. 43. Множества
- •44. Карты отображений
- •45. Обзор сокетов
- •49. Дейтаграммы
- •46. Сетевые классы и интерфейсы 47. Производственные методы 48. Сокеты tcp/ip клиентов и серверов
- •50. Основы оконной графики 51. Иерархия классов awt
- •Класс Applet
- •52. Свойства класса Component
- •53. Класс Container
- •54. Наследники класса Component
- •55. Классы Choice и List
- •56. Классы TextComponent, TextField, TextArea
- •57. Наследники Container
- •58. Swing-технология
- •59. Обработка событий в Java
- •60. Классы-адаптеры
- •61. Понятие и терминология jdbc 62. Связь и различия jdbc и odbc
- •63. Драйвера, соединения и запросы
- •64. DriverManager
- •65. Создание соединения с источником данных
- •66. Интерфейсы Statement, PreparedStatement и CallableStatement
- •69. Использование потоков в апплетах
- •70. Основы xml
- •71. Xml. Схема dtd. Элемент Schema схемы xml
- •72. Ссылки xml
- •74. Язык xLink (Атрибуты связующих элементов xLink, возможные значения атрибута xlink:show, возможные значения атрибута xlink:actuate)
- •75. Язык xPointer (Синтаксис xPointer, элементы абсолютного обнаружения xPointer, выражения отношений, фильтры атрибутов и их значений)
- •76. Объектная модель документа xml – dom
- •77. Simple api для xml (sax)
- •78. Язык преобразований xslt (Операционный xslt, процесс преобразования xsl, использование xslt, преобразования xml в html)
- •80. Сервлеты: структура, назначение и преимущества
- •81. Жизненный цикл сервлета
- •83. Пакеты javax.Servlet и javax.Servlet.Http
- •84. Технология rmi. Сравнение распределенных и нераспределенных приложений
- •85. Архитектура rmi
34. Сериализация
Сериализация это процесс сохранения состояния объекта в последовательность байт;
Сериализация объектов Java позволяет вам взять любой объект, который реализует интерфейс Serializable и включит его в последовательность байт, которые могут быть полностью восстановлены для регенерации оригинального объекта. Это также выполняется при передаче по сети, что означает, что механизм сериализации автоматически поддерживается на различных операционных системах. То есть, вы можете создать объект на машине с Windows, сериализовать его и послать по сети на Unix машину, где он будет корректно реконструирован. Вам не нужно будет беспокоиться о представлении данных на различных машинах, порядке следования байт и любых других деталях.
Сама по себе сериализация объектов очень интересна, потому что это позволяет вам реализовать устойчивую живучесть. Помните, что живучесть означает, что продолжительность жизни объектов не определяется тем, выполняется ли программа — объекты живут в промежутках между вызовами программы. Вы берете сериализованный объект и записываете его на диск, затем восстанавливаете объект при новом вызове программы, таким образом, вы способны обеспечить эффективную живучесть. Причина названия “устойчивая” в том, что вы не можете просто определить объект, используя какой-либо вид ключевого слова “устойчивый”, и позволить системе заботиться о деталях (хотя это может случиться в будущем). import java.io.Serializable;
Сериализация объекта достаточно проста, если объект реализует интерфейс Serializable (этот интерфейс похож на флаг и не имеет методов). Когда сериализация была добавлена в язык, многие стандартные библиотеки классов были изменены, чтобы сделать их сериализованными, включая все оболочки примитивных типов, все контейнерные классы и многие другие. Даже объект Class может быть сериализован. (Смотрите Главу 12 о реализации этого.)
Для сериализации объекта вы создаете определенный сорт объекта OutputStream, а затем вкладываете его в объект ObjectOutputStream. После этого вам достаточно вызвать writeObject( ) и ваш объект будет сериализован и послан в OutputStream. Чтобы провести обратный процесс, вы вкладываете InputStream внутрь ObjectInputStream и вызываете readObject( ). То, что приходит, обычно это ссылка на родительский Object, так что вы должны выполнить обратное приведение, чтобы сделать вещи правильными.
class TestSerial implements Serializable {
public byte version = 100;
public byte count = 0;
}
public static void main(String args[]) throws IOException {
FileOutputStream fos = new FileOutputStream("temp.out");
ObjectOutputStream oos = new ObjectOutputStream(fos);
TestSerial ts = new TestSerial();
oos.writeObject(ts);
oos.flush();
oos.close();
}
35. Обработка исключений в Java
Исключительные ситуации - это аварийные ситуации, которые могут возникнуть во время выполнения программы. В Java исключительные ситуации могут генерироваться либо исполнительной системой JAVA (некоторые фундаментальные ошибки), либо программным кодом(вручную), для сообщения вызывающей программе о некоторой аварийной ситуации. При возникновении исключения, оно должно быть захвачено обработчиком, если таковой определен программистом, или обработчиком по-умолчанию. В последнем случае выдается сообщение, описывающее исключение, формируется определенная дополнительная информация(трасса стека от точки где произошло исключения) и программа завершается. Если это нежелательно, то необходимо предусмотреть обработку. Обработка исключений реализуется через создание объекта, представляющего исключение, который «вбрасывается» в метод, вызвавший ошибку, при помощи ключевых слов: try, catch, trow, trowes, finally. Ключи try, catch, finally используются для формирования блока обработки исключений:
try { //фрагмент программы, в котором в котором возможно
//возникновение ошибки
catch { Имя _класса-исключения_1 имя объекта_1
{// обработка исключений для имя _класса_исключение 1
}
catch {имя класса_исключения_2 имя объекта_2
{//обработчик исключений для имя класса_исключения_2 }
[finally {//блок кода обработки перед выходом из try, например для закрытия открытых файлов}]. Если какое-то исключение возникнет оно должно быть захвачено обработчиком. Если такой обработчик не определен, то оно захватывается обработчиком по умолчанию
Обычно, в этом случае выдается сообщение, описывающее исключение, формируется некоторая дополнительная информация и программа завершается.
Программа сама может вызвать исключительную ситуацию (ручной выброс исключения при помощи throw (по желанию программиста)). Если это нежелательно, т.е если нежелательное стандартное завершение исключительной ситуации, то необходимо предусмотреть обработку. Для чего в программе используется инструкция trow, например
Class TrowDemo
Static void demoproc ( ) {
try { //этот класс не может быть простым типом, а должен
// принадлежать иерархии throwable
throw new NullPointer Exception e1 ;
//создается объект с описанием исключения,
//которое может быть выдано на экран.
} catch (NullPointer Exception e1)
//захват исключения внутри demoproc
{ System.out.println («возникло исключение внутри блока»)
throw e; // повторно выбрасывает исключение во внешний блок,
} } //где оно рассматривается уже как встроенное.
//NullPointer Exception - недопустимое использование нулевой //ссылки.
рublic static void main (String arys [ ]) {
try { demoproc ( ) ;} catch (NullPointer Exception)
{System.out.println («Повторный захват:» +е);
//выводится текст на экран.
trows используется для определения возможных исключений, которые метод может создать, но не образовывает.
Все такие исключения, которые создаются в методе (кроме RuntimeException, Error и их подклассов), должны быть объявлены в предложении throws в заголовке метода, для них должны быть предусмотрены блоки cath в вызывающем блоке. Формат:
Тип_метода имя_метода (список параметров) trows список исключений
Пример, возможно не нужен на лекции
Class TrowDemo { static void trowone
Trows IllegelAccessException («демонстрация»)
}
public static void main (String args [ ])
{try { throwone ( );}
catch (Trows IllegelAccessExceptionе)
{System.out.println («Выброс» + е) }}}
исключения описаны внутри пакета java.lang исключения который неявно импортирован во все классы программы. Большинство исключений класса RuntineException и подклассов Exception встроены (доступны автоматически). Они не компилируются (не проверяются) компилятором и именуются неконтролируемыми исключениями.
Другие, такие как ClassNotFoundException (класс не найден), NoSuchFildException, NoSuchMothodException и др.( такой метод не существует) (контролируемые) должны быть внесены в список trows, если метод может генерировать какое-то из них, но не обрабатывает его (смотри Help).
Собственные подклассы исключений можно создавать наследованием (extends) от класса Exception, получая таким образом доступ к методам, класса Throwable.