
Лекции Java / 06. Базовые и утилитные классы API JAVA.pptx
.pdf
Самарский государственный аэрокосмический университет имени академика С.П. Королёва
Лекция 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 |