Слайд 2
План лекции
Пакет java.lang и его структура
Класс Object и
его методы
Класс Class
Интерфейс Comparable
Классы-обертки примитивных типов
Класс Math
Классы работы со
строками
Пакет java.util и его структура
Слайд 3
Пакет java.lang
Базовые классы
Object
Class
Обертки примитивных типов
Math
Классы работы со строками
Классы
управления процессами и потоками
Средства рефлексии
И т.д.
Базовые интерфейсы
Cloneable
Comparable
Runnable
И т.д.
Основные исключения
Exception
Error
RuntimeException
SecutityException
И
т.д.
Этот пакет импортируется по умолчанию
Слайд 4
Класс Object
Является суперклассом для всех классов (включая массивы)
Переменная
этого типа может ссылаться на любой объект (но не
на переменную примитивного типа)
Его методы наследуются всеми классами
Реализует базовые операции с объектами
Слайд 5
Методы класса Object
Получение строкового представления объекта
String toString()
Получение
ссылки на описание класса объекта
final Class getClass()
Клонирование
объекта (получение копии)
protected Object clone()
Проверка равенства объектов
boolean equals(Object obj)
Получение хэш-кода объекта
int hashCode()
Метод завершения работы с объектом
protected void finalize()
Методы обслуживания блокировок в многопоточных приложениях
void wait(...), void notify(), void notifyAll()
Слайд 6
Клонирование объектов
Считается, что результатом клонирования является копия объекта
Массивы
поддерживают операцию клонирования
В классе Object метод clone() является
защищенным
Метод clone()
реализуется в конкретном
классе
Никто не гарантирует того, что результатом
его выполнения будет копия объекта, и даже
того, что новый объект будет того же класса
Однако существует ряд соглашений,
регламентирующих реализацию
метода clone()
int[] arrayCopy = (int []) array.clone();
Слайд 7
Простое клонирование объектов
Класс должен переопределять метод clone()
Класс должен
реализовывать интерфейс-маркер Cloneable
Результат клонирования должен быть получен вызовом super.clone()
Результатом
работы метода Object.clone() является точная копия объекта
public Object clone() {
Object result = null;
try {
result = super.clone();
} catch (CloneNotSupportedException ex) {
throw new InternalError();
}
return result;
}
Слайд 8
Особенности клонирования
int[][] a = {{1, 2, 3}, {4,
5,6}};
int[][] b = (int[][]) a.clone();
System.out.println(a[0][0]);
b[0][0] = 9;
System.out.println(a[0][0]);
1
9
В
результате клонирования скопировался только сам объект a, но не объект, на которые он ссылался
При использовании результатов клонирования необходимо явное приведение типа
Начиная с Java5 для массивов можно не выполнять явное приведение типа, но только для массивов
Слайд 9
Глубокое клонирование объектов
Простого клонирования может быть недостаточно, если
объект содержит ссылки на агрегированные объекты
В этом случае после
процедуры простого клонирования необходимо создать и их копии тоже
public Object clone() {
Object result = null;
try {
result = super.clone();
result.a = (...) a.clone();
...
} catch (CloneNotSupportedException ex) { }
return result;
}
Слайд 10
Равенство объектов
Простого сравнения ссылок недостаточно для сравнения содержимого
объектов
Для сравнения объектов по их содержимому применяется метод equals(Object
obj)
В классе Object метод реализован таким образом, что возвращает true только при сравнении с самим объектом
Конкретный класс должен переопределять метод equals(...)
Слайд 11
Равенство объектов
Метод equals(...) должен проверять эквивалентность объектов с
точки зрения бизнес-логики
Отношение, задаваемое на множестве объектов этим методом,
должно обладать следующими свойствами:
рефлективность
симметричность
транзитивность
консистентность
сравнение с null должно приводить к результату false
Слайд 12
Хэш-код объекта
Метод int hashCode() предназначен для получения
хэш-кода
– числа, используемого для быстрого сравнения объектов
Если объект не
изменял свое состояние, то значение
хэш-кода не должно изменяться
Если два объекта эквивалентны (с точки зрения метода equals()), то хэш-коды объектов должны быть одинаковыми
Если хэш-коды объектов одинаковы, то это еще не значит,
что объекты эквивалентны
Изменение реализации в классе метода equals() влечет
за собой изменение реализации метода hashCode()
Слайд 13
Класс Class
Является метаклассом для всех классов Java
Экземпляры содержат
описания классов, загружаемых JVM
Не имеет доступного конструктора
Содержит методы для
работы с классами и их методами
Лежит в основе т.н. «рефлексии»
Слайд 14
Интерфейс Comparable
Реализация интерфейса означает введение отношения порядка на
множестве объектов класса
Метод compareTo()
a.compareTo(b) < 0 a
b
a.compareTo(b) > 0 a > b
a.compareTo(b) = 0 a = b
Настоятельно рекомендуется согласовывать работу методов compareTo() и equals()
Слайд 15
Классы-обертки
примитивных типов
Значения примитивных типов не могут быть непосредственно
использованы в контексте, где требуется ссылка
Ссылочное представление значений примитивных
типов является основной задачей т.н. классов-оберток
Экземпляр такого класса хранит внутри значение примитивного типа и предоставляет доступ к этому значению
Слайд 16
Классы-обертки
примитивных типов
Boolean
Byte
Character
Double
Float
Integer
Long
Number
Short
Void
Слайд 17
Наполнение
классов-оберток
Константы типов
Integer.MAX_VALUE, Double.NaN
Конструкторы: по значению и строке
Float(float
value), Float(String s)
Методы получения значения
Boolean.booleanValue(), Float.floatValue()
Методы преобразования типов
Integer.parseInt(String s),
Float.byteValue()
Методы проверки состояния и вида значения
compareTo(...), Double.isInfinite()
Специальные методы, обусловленные спецификой типа
Double.longBitsToDouble(...), Integer.toHexString()
Слайд 18
Задачи классов-оберток примитивных типов
Ссылочное представление значений примитивных типов
Хранение
вспомогательных функций для работы со значениями примитивных типов
Представление примитивных
типов и их значений в механизмах рефлексии
Слайд 19
Класс Math
Предназначен для выполнения простых математических операций
Не имеет
явного конструктора
Является final-классом
Все методы являются статическими
Не гарантирует повторяемости результатов
на различных платформах (в отличие от класса StrictMath)
Слайд 20
Наполнение класса Math
Константы E и PI
Функции взятия модуля
abs()
Функции максимума и минимума max(), min()
Функции округления round(), rint()
Функции
ближайшего целого ceil(), floor()
Тригонометрические функции sin(), cos(), tan(), asin(), acos(), atan()
Функции перевода toDegrees(), toRadians(), atan2()
Функции степени pow(), exp(), log(), sqrt()
Случайное значение random() (см. класс java.util.Random)
Слайд 21
Хранение строк
byte []
Массив байт кодов
char []
Массив Unicode-символов
String
Неизменяемая строка
StringBuffer
Изменяемая
строка
Слайд 22
Работа со строками
Класс String
Значение объекта класса String не
может быть изменено без порождения нового объекта
Реализует операции для
строки в целом
Экземпляры этого класса можно создавать без ключевого слова new
Каждый строковый литерал порождает экземпляр String
Значение любого типа может быть приведено к строке
Слайд 23
Наполнение класса String
Строковое представление
valueOf(), copyValueOf()
Преобразование типов
getBytes(), getChars(), toCharArray(),
toString()
Сравнение
compareTo(), compareToIgnoreCase(), contentEquals(), equals(), equalsIgnoreCase(), intern()
Выделение элементов
charAt(), substring(), split()
Операции
над всей строкой
concat(), replace(), replaceAll(), replaceFirst(), toLowerCase(), toUpperCase(), trim()
Проверка содержимого строки
endsWith(), indexOf(), lastIndexOf(), length(), matches(), regionMatches(), startsWith()
Слайд 24
Пакет java.util.regex
Класс Pattern
Реализует шаблоны регулярных выражений. Позволяет составлять
сложные шаблоны и разделять строки на элементы
Класс Matcher
Реализует поиск
элементов, соответствующих шаблону, в строках и проверку строк на соответствие шаблону
У вас есть проблема. Вы решили использовать регулярные выражения чтобы её решить. Теперь у вас две проблемы.
Слайд 25
Работа со строками
Класс StringBuffer
Реализует методы модификации строки без
порождения нового объекта
Реализует операции с элементами строки по отдельности
Используется
по умолчанию при конкатенации строк
Для хранения строк использует буфер переменного объема
Слайд 26
Наполнение класса StringBuffer
Добавление фрагментов
append(...), insert(...)
Поиск вхождений
indexOf(), lastIndexOf()
Извлечение фрагментов
charAt(),
getChars(), reverse(), substring()
Модификация строки
delete(), deleteCharAt(), replace(), setCharAt(), setLength()
Состояние буфера
length(),
capacity(), ensureCapacity(), trimToSize()
Слайд 27
Конкатенация строк
System.out.println("a = " + a + ";");
System.out.println(
(new StringBuffer("a = "))
.append(a)
.append(";")
.toString()
);
Не стоит злоупотреблять
автоматической конкатенацией
Особенно если для вас критична память и скорость выполнения программы
Слайд 28
Пакет java.util
Классы для работы со временем
Классы для работы
с локализацией
Классы для работы с массивами
Классы и интерфейсы коллекций
Классы
и интерфейсы для создания многопоточных приложений
Прочие вспомогательные классы и интерфейсы
Слайд 29
java.util.Arrays
Содержит статические методы для работы с массивами
Представление массива
списком
List asList(Object[] a)
Поиск элемента в массиве
int binarySearch(…[] a, …
key)
Сравнение массивов по элементам
boolean equals(…[] a1, …[] a2)
Заполнение массива элементами
fill(…[] a, int from, int to, … val)
Сортировка массива
sort(…[] a, int from, int to)
Слайд 30
Классы работы со временем
Date
Отражает дату и время с
точностью до миллисекунд. Не рекомендуется к использованию
Calendar и сопутствующие
Содержит константы и методы для работы с датой и временем с учетом особенностей локализации
Timer
Позволяет создавать задания для более позднего запуска (с использованием потоков инструкций)
Слайд 31
Классы для работы с локализацией
Locale
Содержит константы и методы
для работы с языками и особенностями регионов
TimeZone
Содержит методы для
работы с часовыми поясами
SimpleTimeZone
Реализует TimeZone для Григорианского календаря
Слайд 32
java.util.Random
Экземпляр класса является отдельным генератором псевдослучайных чисел (ГПСЧ)
Различные
ГПСЧ позволяют формировать некоррелированные последовательности
«Основание» имеет размерность 48bit
Методы получения
ПСЧ:
nextBoolean(), nextByte(),
nextDouble(), nextFloat(),
nextInt(), nextLong(),
nextGaussian()
Метод настройки
setSeed(long seed)