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

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

34290-tema3_3_java.lang.ppt

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

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

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

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

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

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

>5 Методы класса Object Получение строкового представления объекта  String toString() Получение ссылки на 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 Клонирование объектов Считается, что результатом клонирования является копия объекта Массивы поддерживают операцию клонирования 6 Клонирование объектов Считается, что результатом клонирования является копия объекта Массивы поддерживают операцию клонирования В классе Object метод clone() является защищенным Метод clone() реализуется в конкретном классе Никто не гарантирует того, что результатом его выполнения будет копия объекта, и даже того, что новый объект будет того же класса Однако существует ряд соглашений, регламентирующих реализацию метода clone() int[] arrayCopy = (int []) array.clone();

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

>Особенности клонирования В результате клонирования скопировался только сам объект a, но не объект, на Особенности клонирования В результате клонирования скопировался только сам объект a, но не объект, на которые он ссылался При использовании результатов клонирования необходимо явное приведение типа Начиная с Java5 для массивов можно не выполнять явное приведение типа, но только для массивов 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

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

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

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

>12 Равенство объектов Метод equalsIgnoreCase(...) должен сравнивает два объекта игнорируя различия в регистре // 12 Равенство объектов Метод equalsIgnoreCase(...) должен сравнивает два объекта игнорируя различия в регистре // Демонстрирует equals () и equalsignoreCase () . class equalsDemo { public static void main(String args[]) { String si = "Hello"; String s2 = "Hello"; String s3 = "Good-bye"; String s4 = "HELLO"; System.out.println(si + " равно " + s2 + " -> " + si.equals(s2)); System.out.println(si + " равно " + s3 + " -> " + si.equals(s3)); System.out.println(si + " равно " + s4 + " -> " + si.equals(s4)); System.out.println(sl + " equalsIgnoreCase " + s4 + " -> " + si.equalsIgnoreCase(s4)) ; } }

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

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

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

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

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

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

>19 Наполнение классов-оберток Методы получения значения Boolean.booleanValue(), Float.floatValue() Методы преобразования типов Integer.parseInt(String s), Float.byteValue() 19 Наполнение классов-оберток Методы получения значения Boolean.booleanValue(), Float.floatValue() Методы преобразования типов Integer.parseInt(String s), Float.byteValue() Методы проверки состояния и вида значения compareTo(...), Double.isInfinite() Специальные методы, обусловленные спецификой типа Double.longBitsToDouble(...), Integer.toHexString()

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

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

>22 Наполнение класса Math Константы E и PI Функции взятия модуля abs() Функции максимума 22 Наполнение класса 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)

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

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

>25 Работа со строками. Класс String String s = 25 Работа со строками. Класс String String s = "abc"; System.out.println(s); String s = "abc"; System.out.println(s.length); String s = "Не is " + age + " years old.";

>26 Наполнение класса String Строковое представление valueOf() - возвращает массив, который содержит список констант 26 Наполнение класса String Строковое представление valueOf() - возвращает массив, который содержит список констант перечислимого типа copyValueOf()- возвращает перечислимую константу, значение которой соответствует содержимому строки, передаваемой в параметре str Преобразование типов getBytes()- возвращает массив байтов getChars()- извлекает больше одного символа toCharArray()- преобразовать все символы в объекте типа string в символьный массив toString()- Возвращает строковый эквивалент вызывающего объекта Сравнение compareTo()- сравнивает объекты compareToIgnoreCase()- сравнивает объекты без учета регистра contentEquals() - Сравнивает строку с указанным параметром equals() – сравнивает две строки equalsIgnoreCase() - сравнивает две строки без учета регистра

>27 Наполнение класса String Выделение элементов charAt() - Первому символу в строке соответствует index=0. 27 Наполнение класса String Выделение элементов charAt() - Первому символу в строке соответствует index=0. При указании на несуществующий символ возвращается пустой символ substring() - Замена подстроки на строку в строке split() - разделяет строку на части по разделителю Операции над всей строкой concat() - сцепляет две строки replaceAll() – заменяет все вхождения одного вызова другим символом toLowerCase() - возвращает значение вызванной строки, переведенной в нижний регистр toUpperCase() - возвращает значение вызванной строки, переведенной в верхний регистр trim() – усекает строку

>28 Наполнение класса String Проверка содержимого строки endsWith() – проверяет заканчивается ли данный объект 28 Наполнение класса String Проверка содержимого строки endsWith() – проверяет заканчивается ли данный объект указанной строкой indexOf() - поиск первого вхождения символа или подстроки lastIndexOf() - Поиск последнего вхождения символа или подстроки length() – длина строки matches() – сравнивает область в строчном объекте с другой некоторой областью в строчном объекте startsWith()- проверяет начинается ли данный объект с указанной строки

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