Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции Java / 06. Базовые и утилитные классы API JAVA.pptx

.pdf
Скачиваний:
154
Добавлен:
16.03.2015
Размер:
195.9 Кб
Скачать

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

Лекция 6

Базовые и утилитные классы

API JAVA

© Составление, Гаврилов А.В., 2013

Самара

2013

План лекции

nПакет java.lang и его структура

nКласс Object и его методы

nКласс Class

nИнтерфейс Comparable

nКлассы-обертки примитивных типов

nКласс Math

nКлассы работы со строками

nПакет java.util и его структура

nCollection Framework

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

2

Пакет java.lang

n Базовые классы

Object

Class

Обертки примитивных типов

Math

Классы работы со строками

Классы управления процессами и потоками

Средства рефлексии

И т.д.

n Базовые интерфейсы

Cloneable

Comparable

Runnable

И т.д.

n Основные исключения

Exception

Error

RuntimeException

SecutityException

И т.д.

n Этот пакет импортируется по умолчанию

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

3

Класс Object

nЯвляется суперклассом для всех классов (включая массивы)

nПеременная этого типа может ссылаться на любой объект (но не на переменную примитивного типа)

nЕго методы наследуются всеми классами

nРеализует базовые операции с объектами

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

4

Методы класса Object

nПолучение строкового представления объекта

String toString()

nПолучение ссылки на описание класса объекта final Class getClass()

nКлонирование объекта (получение копии) protected Object clone()

nПроверка равенства объектов boolean equals(Object obj)

nПолучение хэш-кода объекта int hashCode()

nМетод завершения работы с объектом protected void finalize()

nМетоды обслуживания блокировок в многопоточных приложениях void wait(...), void notify(), void notifyAll()

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

5

Клонирование объектов

nСчитается, что результатом клонирования является копия объекта

nМассивы поддерживают операцию клонирования

int[] arrayCopy = (int []) array.clone();

nВ классе Object метод clone() является защищенным

nМетод clone() реализуется в конкретном классе

nНикто не гарантирует того, что результатом его выполнения будет копия объекта, и даже того, что новый объект будет того же класса

nОднако существует ряд соглашений, регламентирующих реализацию метода clone()

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

6

Простое клонирование объектов

nКласс должен переопределять метод clone()

nКласс должен реализовывать интерфейс-маркер Cloneable

nРезультат клонирования должен быть получен вызовом super.clone()

nРезультатом работы метода Object.clone() является точная копия объекта

public Object clone() { Object result = null; try {

result = super.clone();

} catch (CloneNotSupportedException ex) { throw new InternalError();

}

return result;

}

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

7

Особенности клонирования

int[][] a =

{{1, 2, 3}, {4, 5,6}};

 

int[][] b =

(int[][]) a.clone();

1

System.out.println(a[0][0]);

9

b[0][0] = 9;

System.out.println(a[0][0]);

nВ результате клонирования скопировался только сам объект a, но не объект, на которые он ссылался

nПри использовании результатов клонирования необходимо явное приведение типа

Начиная с Java5 для массивов можно не выполнять явное приведение типа, но только для массивов

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

8

Глубокое клонирование объектов

nПростого клонирования может быть недостаточно, если объект содержит ссылки на агрегированные объекты

nВ этом случае после процедуры простого клонирования необходимо создать и их копии тоже

public Object clone() { Object result = null; try {

result = super.clone(); result.a = (...) a.clone();

...

} catch (CloneNotSupportedException ex) { } return result;

}

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

9

Равенство объектов

nПростого сравнения ссылок недостаточно для сравнения содержимого объектов

nДля сравнения объектов по их содержимому применяется метод equals(Object obj)

nВ классе Object метод реализован таким образом, что возвращает true только при сравнении с самим объектом

nКонкретный класс должен переопределять метод equals(...)

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

10