Скачать презентацию Полезные классы Лекция 3 УНЦ Инфотех Воронеж 2012 Скачать презентацию Полезные классы Лекция 3 УНЦ Инфотех Воронеж 2012

Тема3_3_java.lang.ppt

  • Количество слайдов: 30

Полезные классы Лекция 3 УНЦ «Инфотех» Воронеж 2012 Полезные классы Лекция 3 УНЦ «Инфотех» Воронеж 2012

План лекции n Пакет java. lang и базовые классы 1 План лекции n Пакет java. lang и базовые классы 1

Пакет java. lang n Импортируется по умолчанию n Класс Object Класс Class Классы-обертки примитивных Пакет java. lang n Импортируется по умолчанию n Класс Object Класс Class Классы-обертки примитивных типов Класс Math Инструменты работы со строками Классы управления процессами и потоками Прочие фундаментальные классы n n n 2

Класс Class Является метаклассом для всех классов Java n Экземпляры содержат описания классов, загружаемых Класс Class Является метаклассом для всех классов Java n Экземпляры содержат описания классов, загружаемых JVM n Не имеет доступного конструктора n Содержит методы для работы с классами и их методами n Лежит в основе т. н. «рефлексии» n 3

Класс Object n Является суперклассом для всех классов (включая массивы) n Переменная этого типа Класс Object n Является суперклассом для всех классов (включая массивы) n Переменная этого типа может ссылаться на любой объект (но не на переменную примитивного типа) n Его методы наследуются всеми классами n Реализует базовые операции с объектами 4

Методы класса Object n Получение строкового представления объекта String to. String() n Получение ссылки Методы класса Object n Получение строкового представления объекта String to. String() n Получение ссылки на описание класса объекта final Class get. Class() n Клонирование объекта (получение копии) protected Object clone() n Проверка равенства объектов boolean equals(Object obj) n Получение хэш-кода объекта int hash. Code() n Метод завершения работы с объектом protected void finalize() n Методы обслуживания блокировок в многопоточных приложениях void wait(. . . ), void notify(), void notify. All() 5

Клонирование объектов n n Считается, что результатом клонирования является копия объекта Массивы поддерживают операцию Клонирование объектов n n Считается, что результатом клонирования является копия объекта Массивы поддерживают операцию клонирования int[] array. Copy = (int []) array. clone(); n n В классе Object метод clone() является защищенным Метод clone() реализуется в конкретном классе Никто не гарантирует того, что результатом его выполнения будет копия объекта, и даже того, что новый объект будет того же класса Однако существует ряд соглашений, регламентирующих реализацию метода clone() 6

Простое клонирование объектов n n Класс должен переопределять метод clone() Класс должен реализовывать интерфейс-маркер Простое клонирование объектов n n Класс должен переопределять метод clone() Класс должен реализовывать интерфейс-маркер Cloneable Результат клонирования должен быть получен вызовом super. clone() Результатом работы метода Object. clone() является точная копия объекта public Object clone() { Object result = null; try { result = super. clone(); } catch (Clone. Not. Supported. Exception ex) { } return result; } 7

Особенности клонирования int[][] a = {{1, 2, 3}, {4, 5, 6}}; int[][] b = Особенности клонирования 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 n В результате клонирования скопировался только сам объект a, но не объект, на которые он ссылался n При использовании результатов клонирования необходимо явное приведение типа l Начиная с Java 5 для массивов можно не выполнять явное приведение типа, но только для массивов 8

Глубокое клонирование объектов n Простого клонирования может быть недостаточно, если объект содержит ссылки на Глубокое клонирование объектов n Простого клонирования может быть недостаточно, если объект содержит ссылки на агрегированные объекты n В этом случае после процедуры простого клонирования необходимо создать и их копии тоже public Object clone() { Object result = null; try { result = super. clone(); result. a = (. . . ) a. clone(); . . . } catch (Clone. Not. Supported. Exception ex) { } return result; } 9

Равенство объектов n Простого сравнения ссылок недостаточно для сравнения содержимого объектов n Для сравнения Равенство объектов n Простого сравнения ссылок недостаточно для сравнения содержимого объектов n Для сравнения объектов по их содержимому применяется метод equals(Object obj) n В классе Object метод реализован таким образом, что возвращает true только при сравнении с самим объектом n Конкретный класс должен переопределять метод equals(. . . ) 10

Равенство объектов n Метод equals(. . . ) должен проверять эквивалентность объектов с точки Равенство объектов n Метод equals(. . . ) должен проверять эквивалентность объектов с точки зрения бизнес -логики (поэлементно в соответствующем порядке) n Отношение, задаваемое на множестве объектов этим методом, должно обладать следующими свойствами: l l l рефлективность симметричность транзитивность непротиворечивость сравнение с null должно приводить к результату false 11

Равенство объектов n Метод equals. Ignore. Case(. . . ) должен сравнивает два объекта Равенство объектов n Метод equals. Ignore. Case(. . . ) должен сравнивает два объекта игнорируя различия в регистре // Демонстрирует equals () и equalsignore. Case (). class equals. Demo { public static void main(String args[]) { String si = "Hello"; String s 2 = "Hello"; String s 3 = "Good-bye"; String s 4 = "HELLO"; System. out. println(si + " равно " + s 2 + " -> " + si. equals(s 2)); System. out. println(si + " равно " + s 3 + " -> " + si. equals(s 3)); System. out. println(si + " равно " + s 4 + " -> " + si. equals(s 4)); System. out. println(sl + " equals. Ignore. Case " + s 4 + " -> " + si. equals. Ignore. Case(s 4)) ; } } 12

Результат примера Hello равно Hello -> true Hello равно equals Good-bye -> false Hello Результат примера Hello равно Hello -> true Hello равно equals Good-bye -> false Hello равно equals HELLO -> false Hello equals. Ignore. Case HELLO -> true 13

Хэш-код объекта n n n При хэшировании информационное содержание ключа используется, чтобы определить уникальное Хэш-код объекта n n n При хэшировании информационное содержание ключа используется, чтобы определить уникальное значение, называемое его хэш-кодом. хэш-код применяется как индекс (номер) элемента, в котором хранятся данные, связанные с ключом. Преобразование ключа в его хэш-код выполняется автоматически хэш-код не может также прямо индексировать хэштаблицу. Преимущество хэширования состоит в том, что оно сохраняет постоянным время выполнения основных операций, (add(), contains () , remove (), size () , даже для больших наборов. 14

Хэш-код объекта n n n Метод int hash. Code() предназначен для получения хэш-кода – Хэш-код объекта n n n Метод int hash. Code() предназначен для получения хэш-кода – числа, используемого для быстрого сравнения объектов Если объект не изменял свое состояние, то значение хэш -кода не должно изменяться Если два объекта эквивалентны (с точки зрения метода equals()), то хэш-коды объектов должны быть одинаковыми Если хэш-коды объектов одинаковы, то это еще не значит, что объекты эквивалентны Изменение реализации в классе метода equals() влечет за собой изменение реализации метода hash. Code() 15

Классы-обертки примитивных типов n Значения примитивных типов не могут быть непосредственно использованы в контексте, Классы-обертки примитивных типов n Значения примитивных типов не могут быть непосредственно использованы в контексте, где требуется ссылка (нельзя передавать по ссылке!) n Ссылочное представление значений примитивных типов является основной задачей т. н. классов-оберток n Экземпляр такого класса хранит внутри значение примитивного типа и предоставляет доступ к этому значению 16

Классы-обертки примитивных типов n Boolean n Integer n Byte n Long n Character n Классы-обертки примитивных типов n Boolean n Integer n Byte n Long n Character n Number n Double n Short n Float n Void Возвращает в формате объекта 17

Наполнение классов-оберток n Константы типов l l l max_value. Максимальное положительное значение. min_value. Минимальное Наполнение классов-оберток n Константы типов l l l max_value. Максимальное положительное значение. min_value. Минимальное положительное значение. Na. N. Нечисловое значение (Not a Number). positive_infinity. Положительная бесконечность. negative_infinity. Отрицательная бесконечность. type. Объект типа class для числовых типов float или double. Например: Integer. MAX_VALUE, Double. Na. N n Конструкторы: по значению и строке Float(float value), Float(String s) 18

Наполнение классов-оберток n Методы получения значения Boolean. boolean. Value(), Float. float. Value() n Методы Наполнение классов-оберток n Методы получения значения Boolean. boolean. Value(), Float. float. Value() n Методы преобразования типов Integer. parse. Int(String s), Float. byte. Value() n Методы проверки состояния и вида значения compare. To(. . . ), Double. is. Infinite() n Специальные методы, обусловленные спецификой типа Double. long. Bits. To. Double(. . . ), Integer. to. Hex. String() 19

Задачи классов-оберток примитивных типов n Ссылочное представление значений примитивных типов n Хранение вспомогательных функций Задачи классов-оберток примитивных типов n Ссылочное представление значений примитивных типов n Хранение вспомогательных функций для работы со значениями примитивных типов n Представление примитивных типов и их значений в механизмах рефлексии 20

Класс Math Предназначен для выполнения простых математических операций n Не имеет явного конструктора n Класс Math Предназначен для выполнения простых математических операций n Не имеет явного конструктора n Является final-классом n Все методы являются статическими n Не гарантирует повторяемости результатов на различных платформах (в отличие от класса Strict. Math) n 21

Наполнение класса Math n n n n n Константы E и PI Функции взятия Наполнение класса Math n n n n n Константы E и PI Функции взятия модуля abs() Функции максимума и минимума max(), min() Функции округления round(), rint() Функции ближайшего целого ceil(), floor() Тригонометрические функции sin(), cos(), tan(), asin(), acos(), atan() Функции перевода to. Degrees(), to. Radians(), atan 2() Функции степени pow(), exp(), log(), sqrt() Случайное значение random() (см. класс java. util. Random) 22

Хранение строк n byte [] n char [] n String Массив байт кодов Массив Хранение строк n byte [] n char [] n String Массив байт кодов Массив Unicode-символов Неизменяемая строка n String. Buffer Изменяемая строка 23

Работа со строками. Класс String n n n Значение объекта класса String не может Работа со строками. Класс String n n n Значение объекта класса String не может быть изменено без порождения нового объекта Реализует операции для строки в целом Экземпляры этого класса можно создавать без ключевого слова new n Каждый строковый литерал порождает экземпляр String n Значение любого типа может быть приведено к строке 24

Работа со строками. Класс String s =

Наполнение класса String n Строковое представление value. Of() - возвращает массив, который содержит список Наполнение класса String n Строковое представление value. Of() - возвращает массив, который содержит список констант перечислимого типа l copy. Value. Of()- возвращает перечислимую константу, значение которой соответствует содержимому строки, передаваемой в параметре str l n Преобразование типов get. Bytes()- возвращает массив байтов l get. Chars()- извлекает больше одного символа l to. Char. Array()- преобразовать все символы в объекте типа string в символьный массив l to. String()- Возвращает строковый эквивалент вызывающего объекта l n Сравнение l l l compare. To()- сравнивает объекты compare. To. Ignore. Case()- сравнивает объекты без учета регистра content. Equals() - Сравнивает строку с указанным параметром equals() – сравнивает две строки equals. Ignore. Case() - сравнивает две строки без учета регистра 26

Наполнение класса String n Выделение элементов l char. At() - Первому символу в строке Наполнение класса String n Выделение элементов l char. At() - Первому символу в строке соответствует index=0. При указании на несуществующий символ возвращается пустой символ substring() - Замена подстроки на строку в строке l split() - разделяет строку на части по разделителю l n Операции над всей строкой l l l concat() - сцепляет две строки replace. All() – заменяет все вхождения одного вызова другим символом to. Lower. Case() - возвращает значение вызванной строки, переведенной в нижний регистр to. Upper. Case() - возвращает значение вызванной строки, переведенной в верхний регистр trim() – усекает строку 27

Наполнение класса String n Проверка содержимого строки l ends. With() – проверяет заканчивается ли Наполнение класса String n Проверка содержимого строки l ends. With() – проверяет заканчивается ли данный объект указанной строкой l index. Of() - поиск первого вхождения символа или подстроки l last. Index. Of() - Поиск последнего вхождения символа или подстроки l length() – длина строки l matches() – сравнивает область в строчном объекте с другой некоторой областью в строчном объекте l starts. With()- проверяет начинается ли данный объект с указанной строки 28

Спасибо за внимание! Спасибо за внимание!