Основы программирования на java

Содержание

Слайд 2

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены

Новосибирск, 2004 (С) Всеволод Рылов, все права защищены

Слайд 3

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены

Enumeration, Comparator

Enumeration – объекты классов, реализующих

Новосибирск, 2004 (С) Всеволод Рылов, все права защищены Enumeration, Comparator Enumeration –
данный интерфейс, используются для предоставления однопроходного последовательного доступа к серии объектов:
Hashtable t = …;
for(Enumeration e = t.keys(); e.hasMoreElements();) {
String s = e.nextElement();
}
Comparator – классы, реализующие данный интерфейс используются для обеспечения сравнения произвольных элементов. Используются при сортировке и организации упорядоченных контейнеров:
Comparator c = new Comparator (){…};
MyClass array[] = …;
Arrays.sort(array,c);

Слайд 4

Паттерн Model-View (Observer)

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены

Паттерн Model-View (Observer) Новосибирск, 2004 (С) Всеволод Рылов, все права защищены

Слайд 5

Коллекция объектов (контейнер)

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены

Коллекция объектов (контейнер) Новосибирск, 2004 (С) Всеволод Рылов, все права защищены

Слайд 6

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены

Использование итераторов

Collection col = …;
for (Iterator

Новосибирск, 2004 (С) Всеволод Рылов, все права защищены Использование итераторов Collection col
i = col.iterator(); i.hasNext(); ) {
String s = i.next();
}
for (String s : col ) { s; } //Альтернатива
ConcurrentModificationException – возникает когда коллекция изменена во время итерирования другим потоком
IllegalStateException – возникает при попытке удаления элемента с помощью вызова remove(), когда еще не был вызван первый метод next(), или итератор указывает на конец коллекции (hasNext() возвращает false)
NoSuchElementException – возникает при попытке вызова next() когда hasNext() возвращает flase
UnsupportedOperationException – возникает при вызове метода который не поддерживается конкретной реализацией коллекции

Слайд 7

Множества

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены

Множества Новосибирск, 2004 (С) Всеволод Рылов, все права защищены

Слайд 8

Упорядоченные множества

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены

Упорядоченные множества Новосибирск, 2004 (С) Всеволод Рылов, все права защищены

Слайд 9

Очереди

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены

Очереди Новосибирск, 2004 (С) Всеволод Рылов, все права защищены

Слайд 10

Списки

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены

Списки Новосибирск, 2004 (С) Всеволод Рылов, все права защищены

Слайд 11

Реализации списка

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены

Реализации списка Новосибирск, 2004 (С) Всеволод Рылов, все права защищены

Слайд 12

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены

Пример простой реализации стека

import java.util.*;
public class

Новосибирск, 2004 (С) Всеволод Рылов, все права защищены Пример простой реализации стека
Stack {
private LinkedList content;
public Stack() {
content = new LinkedList();
}
public void push(T obj) {
content.addFirst(obj);
}
public T pop() throws NoSuchElementException
{
return content.removeFirst();
}
public boolean hasMoreElements() {
if (content.size() > 0) return true;
else return false;
}

public static void main(String args[])
throws NoSuchElementException {
Stack s = new Stack();
for (String o : args) ‏ {
s.push(o);
}
while(s.hasMoreElements()) {
System.out.println(s.pop());
}
}
}

Слайд 13

Ассоциативные контейнеры

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены

Ассоциативные контейнеры Новосибирск, 2004 (С) Всеволод Рылов, все права защищены

Слайд 14

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены

Новосибирск, 2004 (С) Всеволод Рылов, все права защищены

Слайд 15

Вектор

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены

Вектор Новосибирск, 2004 (С) Всеволод Рылов, все права защищены

Слайд 16

Хеш-таблица

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены

Хеш-таблица Новосибирск, 2004 (С) Всеволод Рылов, все права защищены

Слайд 17

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены

Класс-утилита Collections

Служит для поддержки классов контейнеров

Новосибирск, 2004 (С) Всеволод Рылов, все права защищены Класс-утилита Collections Служит для
и осуществления основных манипуляций с содержимым:
sort(List), sort(List, Comparator)‏
binarySearch(List, Object), binarySearch(List, Object, Comparator)‏
reverse(List)‏
shuffle(List), shuffle(List,Random)‏
fill(List,Object)‏
copy(List, List)‏
min(Collection), min(Collection, Comparator)‏
max(Collection), max(Collection,Comoarator)‏
Представляет коллекцию как Enumeration (метод enumeration(Collection))‏
Создает не модифицируемый список, содержащий несколько копий объекта: nCopies(int,Object):List
Содержит специальные статические поля: EMPTY_SET, EMPTY_LIST, EMPTY_MAP

Слайд 18

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены

Класс-утилита Collections (продолж.)‏

Предоставляет обертки для защиты

Новосибирск, 2004 (С) Всеволод Рылов, все права защищены Класс-утилита Collections (продолж.)‏ Предоставляет
контейнеров от модификации или для обеспечения синхронизированного доступа:
unmodifiableXXX(arg:XXX):XXX
synchronizedXXX(arg:XXX):XXX
XXX - это Collection, Set, SortedSet, List, Map, SortedMap
Предоставляет не модифицируемые обертки-одиночки, содержащие только один элемент (или пару ключ-значение):
singleton(Object):Set
singletonList(Object):List
singletonMap(Object,Object):Map

Слайд 19

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены

Работа со временем

Новосибирск, 2004 (С) Всеволод Рылов, все права защищены Работа со временем

Слайд 20

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены

Таймер и планируемые задания

Новосибирск, 2004 (С) Всеволод Рылов, все права защищены Таймер и планируемые задания

Слайд 21

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены

Интернационализация

Новосибирск, 2004 (С) Всеволод Рылов, все права защищены Интернационализация

Слайд 22

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены

Подсистема ввода-вывода java.io

Новосибирск, 2004 (С) Всеволод Рылов, все права защищены Подсистема ввода-вывода java.io

Слайд 23

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены

Средства работы с файлами

Новосибирск, 2004 (С) Всеволод Рылов, все права защищены Средства работы с файлами

Слайд 24

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены

Потоки ввода-вывода

Потоки ввода вывода бывают двух

Новосибирск, 2004 (С) Всеволод Рылов, все права защищены Потоки ввода-вывода Потоки ввода
типов:
узловые потоки (node streams) – предоставляют ввод вывод на уровне потоков байт
фильтрующие потоки (filter streams) – предоставляют обертки вокруг низкоуровневых потоков для обеспечения расширенной функциональности

Слайд 25

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены

Узловые потоки

Узловые потоки работают непосредственно с

Новосибирск, 2004 (С) Всеволод Рылов, все права защищены Узловые потоки Узловые потоки
подлежащими источниками (приемниками) данных на уровне байт.
Источниками(приемниками) могут быть:
файлы на файловой системе – FileInputStream, FileOutputStream
массивы байт в памяти – ByteArrayInputStream, ByteArrayOutputStream
каналы (pipes) - PipedInputStream, PipedOutputStream
строки – StringBufferInputStream (deprecated)‏
прочие источники – сокеты и т.д: something.getInputStream(), something.getOutputStream()‏

Слайд 26

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены

Пример – копирование файлов

import java.io.*;
public class

Новосибирск, 2004 (С) Всеволод Рылов, все права защищены Пример – копирование файлов
FileCopy {
public static void main(String args[]) {
InputStream in = null;
OutputStream out = null;
try {
in = new FileInputStream(args[0]);
out = new FileOutputStream(args[1]);
} catch (Exception e) {
System.out.println("Неправильные аргументы");
if (in!=null) try {in.close();} catch(IOException ix2){}
return;
}
byte buf[] = new byte[1024]; //Буфер для хранения промежуточного блока
int read; //Переменная для хранения количества прочитанных байт
try {
while ( (read = in.read(buf)) >= 0) //При достижении конца вернет <0
out.write(buf, 0, read); //Записываем ровно столько сколько удалось прочитать
} catch (IOException ioex) {
System.out.println(“Ошибка ввода/вывода:”+ioex.getLocalizedMessage());
} finally {
try {in.close();} catch(IOException ix2){}
try {out.close();} catch (IOException ix3) {}
}
}
}

Слайд 27

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены

Фильтрующие потоки

Фильтрующие потоки предоставляют дополнительную функциональность

Новосибирск, 2004 (С) Всеволод Рылов, все права защищены Фильтрующие потоки Фильтрующие потоки
на основе других потоков
абстрактные – FilterInputStream, FilterOutputStream
буферизация – BufferedInputStream, BufferedOutputStream
форматированный ввод-вывод данных – DataInputStream, DataOutputStream
сериализация объектов – ObjectInputStream, ObjectOutputStream
опережающее чтение – PushbackInputStream
объединение потоков – SequenceInputStream
печатный поток вывода – PrintStream
построчное чтение – LineNumberInputStream (deprecated)‏

Слайд 28

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены

Произвольный доступ к файлу

RandomAccessFile используется для

Новосибирск, 2004 (С) Всеволод Рылов, все права защищены Произвольный доступ к файлу
осуществления произвольного доступа к содержимому файла:
обеспечивает форматированный ввод-вывод данных (реализует интерфейсы DataInput и DataOutput)‏
void seek(long) - позиционирование в файле
long getFilePointer() - текущая позиция курсора

Слайд 29

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены

Символьные потоки (readers & writers)‏

В отличие

Новосибирск, 2004 (С) Всеволод Рылов, все права защищены Символьные потоки (readers &
от байтовых потоков, работают на уровне символов, что позволяет корректно работать с различными кодировками
В качестве мостов между байтовыми и символьными потоками используются классы InputStreamReader и OutputStreamWriter

Слайд 30

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены

Символьные потоки

Узловые символьные потоки:
файловые – FileReader,

Новосибирск, 2004 (С) Всеволод Рылов, все права защищены Символьные потоки Узловые символьные
FileWriter
на основе массивов символов – CharArrayReader, CharArrayWriter
канальные – PipedReader, PipedWriter
строковые – StringReader, StringWriter
Фильтрующие символьные потоки:
абстрактные – FilterReader, FilterWriter
буферизирующие – BufferedReader, BufferedWriter
переходные – InputStreamReader, OutputStreamWriter
опережающее чтение – PushbackReader
по строчное чтение – LineNumberReader
печатный поток вывода – PrintWriter

Слайд 31

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены

StreamTokenizer class

Новосибирск, 2004 (С) Всеволод Рылов, все права защищены StreamTokenizer class

Слайд 32

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены

Сериализация объектов

Средства сериализации и десериализации объектов

Новосибирск, 2004 (С) Всеволод Рылов, все права защищены Сериализация объектов Средства сериализации
пакета java.io реализуют поддержку принципа сохраняемости ООП
Сериализация используется для сохранения иерархий объектов для передачи в другую виртуальную машину, либо для последующего восстановления в другом сеансе работы системы
Особенности сериализации:
версионность классов сериализуемых объектов
сохранение иерархий
кеширование и переиспользование ссылок на уже сериализованные объекты
средства управления процессом сериализации (десериализации) объектов

Слайд 33

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены

Новосибирск, 2004 (С) Всеволод Рылов, все права защищены

Слайд 34

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены

Исключения при сериализации

Новосибирск, 2004 (С) Всеволод Рылов, все права защищены Исключения при сериализации

Слайд 35

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены

Общие правила

Классы, объекты которых подлежат сериализации

Новосибирск, 2004 (С) Всеволод Рылов, все права защищены Общие правила Классы, объекты
должны реализовывать маркерный интерфейс java.io.Serializable
По умолчанию подлежат сохранению все поля объектов не объявленные transient. Статические поля не сеариализуются
Для сериализации и десериализации используются фильтрующие потоки ObjectOutputStream и ObjectInputStream
Сериализуемые поля класса реализующего интерфейс Serializable должны быть примитивными типами либо типами, реализующими интерфейс Serializable
Если класс имеет своим суперклассом класс, не реализующий интерфейс Serializable, то у данного суперкласса должен быть доступен конструктор с пустым списком аргументов
Сериалиазации внутренних или анонимных классов следует категорически избегать

Слайд 36

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены

Управление сериализацией объекта

Для явного определения списка

Новосибирск, 2004 (С) Всеволод Рылов, все права защищены Управление сериализацией объекта Для
сериализуемых полей нужно в классе объявить поле private static final ObjectStreamField[] serialPersistentFields = {…};
Для управления процессом сериализации/десериализации нужно в классе объявить методы:
private void writeObject(java.io.ObjectOutputStream out) throws IOException {…}
private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException {…}
Для управления замещением объкта при сериализации/десериализации нужно определить методы:
Object writeReplace() throws ObjectStreamException {…}
Object readResolve() throws ObjectStreamException {…}
Для явного задания номера версии нужно определить поле
static final long serialVersionUID = …;

Слайд 37

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены

Интерфейс java.io.Externalizable

Позволяет полностью управлять форматом

Новосибирск, 2004 (С) Всеволод Рылов, все права защищены Интерфейс java.io.Externalizable Позволяет полностью
записи данных класса (автоматически сохраняется только информация об классе и объекте)‏
Для сохранения состояния нужно реализовать метод
public void writeExternal(ObjectOutput out) throws IOException
Для восстановления состояния нужно реализовать метод
public void readExternal(ObjectInput in) throws IOException, java.lang.ClassNotFoundException
Класс реализующий интерфейс Externalizable должен иметь public конструктор с пустым списком аргументов

Слайд 38

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены

Версионность

Изменения, ведущие к несовместимости версий классов:
Удаление

Новосибирск, 2004 (С) Всеволод Рылов, все права защищены Версионность Изменения, ведущие к
полей не объявленных transient
Изменение позиции класса в иерархии классов
Изменение факта наличия/отсутствия модификаторов static и transient у поля
Изменение типа у поля примитивного (встроенного) типа
Изменение реализации методов writeObject() и readObject() на предмет использования методов defaultWriteObject() и defaultReadObject() классов ObjectOutputStream и ObjectInputStream соответственно
Изменение класса с Serializable на Externalizable и наоборот
Добавление методов writeReplace() или readResolve()‏
Изменение факта наследования классом интерфейсов Serializable или Externalizable

Слайд 39

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены

Работа с сетью

Для работы с сетью

Новосибирск, 2004 (С) Всеволод Рылов, все права защищены Работа с сетью Для
используется пакет java.net, предоставляющий средства:
адресации в Internet (InetAddress, + средства java 1.4: Inet4Address, Inet6Address, InetSocketAddress, SocketAddress)‏
работы с протоколом TCP (Socket, ServerSocket, SocketOptions)‏
работы с протоколом UDP (DatagramSocket, DatagramPacket, MulticastSocket)‏
работы с URL и поддержки HTTP (URL, URLConnection, HttpURLConnection, JarURLConnection, URLDecoder, URLEncoder, ContentHandler, URLStreamHandler)‏
авторизации в Internet (Authenticator, PasswordAuthentication)‏
динамической загрузки классов из сети (URLClassLoader)‏