Клас Object і його методи JAVA ДЛЯ ANDROID

&nbsp

Клас Java Object – Java lang Object – це кореневої предок якого класу Будь-який обєкт Java відноситься до класу Object Якщо при визначенні класу не відбувається автоматичного вказівки суперкласу, то опісиваемиемий клас є прямим подклассом класу Object Клас Object визначає стандартну реалізацію для деяких ключових поводжень, властивих будь-якому обєкту Якщо вони не перевизначаються суперкласом, то поведінки успадковуються безпосередньо від класу Object

Методи wait, noti fy і noti fyAl 1, що відносяться до класу Object, беруть участь у підтримці паралелізму (concurrency support), реалізованої в Java Ці методи розглядаються в підрозділі «Управління потоками за допомогою методів wait () і notify () »розділу« Ідіоми програмування в Java »даної глави

За допомогою методу toString обєкт створює власне строкове представлення Цікаво відзначити, що метод toString використовується для зчеплення з рядком: з рядком може бути зчеплений будь-який обєкт У наступному прикладі показано два варіанти виводу на друк одного і того ж повідомлення: виконання обох методів є ідентичним В обох випадках створюється новий екземпляр класу Foo, активується його метод toStri ng, а потім відбувається зчеплення результату з рядком літералів Потім результат друкується:

Реалізація toString в класі Object повертає не надто корисну рядок, яка заснована на розташуванні обєкта в купі Перевизначення toString в своєму коді – хороший перший крок до полегшення налагодження коду

Методи clone і finalіze можна назвати реліктами Середа часу виконання Java викликає метод finalіze, тільки якщо він перевизначається в підкласі Якщо ж клас явно визначає finalіze, то він викликається для обєкта цього класу, але відразу ж після цього обєкт підбирається складальником сміття У Java не тільки немає однозначної відповіді про те, коли це може статися, але навіть не гарантується, що це взагалі відбудеться Крім того, виклик методу finalіze може відновити обєкт Фокус ось у чому: збирач сміття підбирає обєкти, до яких не йдуть живі посилання Однак реалізація finalіze запросто створює нову живу посилання, наприклад додаючи фіналізіруемий обєкт в який-небудь список Тому існування методу finalize багато в чому перешкоджає оптимізації визначального класу Застосовуючи при роботі finalіze, ви купуєте проблеми, не порівнянні з можливим позитивним ефектом

Метод сlone створює обєкти в обхід конструкторів Хоча clone і визначається стосовно Object, виклик його до обєкта викличе виключення, якщо тільки обєкт не реалізує інтерфейс Cloneable Метод clone – Це, по суті, оптимізація, яка може бути корисна, якщо на створення обєкта йде істотна кількість ресурсів У той час як при вмілому зверненні clone може бути корисний у деяких випадках, є ще конструктор копіювання – приймаюче існуючий екземпляр в якості єдиного аргументу Як правило, він діє набагато більш прямолінійно, і в більшості випадків витратами на його використання можна знехтувати

За допомогою ще двох методів класу Object – hashCode і equals – «викликає» дізнається, чи є викликається обєкт таким же, як і той, з яким відбувається порівняння

При визначенні методу equals в документації по інтерфейсах програмування додатків для класу Object обмовляється угоду, якому повинна підкорятися будь-яка реалізація методу equals При коректної реалізації метод equals має наступні атрибути, і перераховані нижче повязані з ними твердження завжди повинні виконуватися:

Якщо х equals (у) є істинним в будь-який момент життєвого циклу програми, то він завжди є істинним за умови, що значення х і у не змінюються

Потрібно постаратися, щоб все це зробити правильно, і все одно процес може виявитися дивно складним Звичайна помилка, що порушує зворотність, – це визначення нового класу, який іноді виявляється рівний вже існуючого класу Припустимо, програма використовує існуючу бібліотеку, яка визначає клас EnglіshWeekdays Тепер припустимо, що ви додатково визначаєте клас FrenchWeekdays Виникає очевидне спокуса визначити для класу FrenchWeekdays метод equals, який повертає true, що порівнює один з елементів (днів) з класу EnglіshWeekdays з його французьким еквівалентом Не робіть так Наявний «англійська» клас нічого «не знає» про те, що ви створили новий клас, тому ніколи не розпізнає екземпляри нового класу як рівні екземплярам старого Ви порушуєте принцип зворотності

Методи hashCode і equals необхідно сприймати в парі: якщо ви переобумовленої один з них, то перевизначайте і інший У багатьох бібліотечних процедурах hashCode вважається оптимізованим інструментом приблизної оцінки того, чи рівні (equal) два обєкта Спочатку в таких бібліотеках порівнюються хеш-коди двох обєктів Якщо два коди відрізняються, то бібліотека вважає, що немає необхідності проводити якісь ще, більш витратні порівняння, так як обєкти виразно не рівні Але суть розрахунку хеш-кодів полягає в тому, щоб розрахувати щось дуже швидко, і це добре підходить для методу equals Якщо необхідно перевірити кожну клітинку у великому масиві, щоб розрахувати хеш-код, то ця операція, ймовірно, буде більш тривалою, ніж точне порівняння Іншою крайністю є швидкий вихід – повертати 0, який буде єдиним варіантом розрахунку хеш-коду Це просто буде не дуже корисно

Джерело: Android Програмування на Java для нового покоління мобільних пристроїв

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*