logo

Клас об'єктів в Java

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

Клас об'єктів в Java

Використання методів класу об’єктів

Клас Object надає декілька таких методів:



  • метод toString().
  • метод hashCode().
  • метод equals(Object obj).
  • метод finalize().
  • метод getClass().
  • метод clone().
  • методи wait(), notify() notifyAll().

1. Метод toString().

Функція toString() надає рядкове представлення об’єкта та використовується для перетворення об’єкта на рядок. Стандартний метод toString() для класу Object повертає рядок, що складається з назви класу, екземпляром якого є об’єкт, символу @ і шістнадцяткового представлення хеш-коду об’єкта без знаку. Іншими словами, це визначається як:

// Default behavior of toString() is to print class name, then // @, then unsigned hexadecimal representation of the hash code // of the object  public String toString() {  return getClass().getName() + '@' + Integer.toHexString(hashCode()); }>

Завжди рекомендується перевизначати toString() метод для отримання нашого власного рядкового представлення Object. Додаткову інформацію про перевизначення методу toString() див. – Перевизначення toString() у Java

Примітка: Щоразу, коли ми намагаємося надрукувати будь-яке посилання на об’єкт, викликається внутрішній метод toString().

Student s = new Student();  // Below two statements are equivalent System.out.println(s); System.out.println(s.toString());>

2. метод hashCode().

Для кожного об’єкта JVM генерує унікальний номер, який є хеш-кодом. Він повертає різні цілі числа для різних об’єктів. Поширеною помилкою щодо цього методу є те, що метод hashCode() повертає адресу об’єкта, що є неправильним. Він перетворює внутрішню адресу об’єкта в ціле число за допомогою алгоритму. Метод hashCode() є рідний оскільки в Java неможливо знайти адресу об’єкта, тому для пошуку адреси об’єкта використовуються рідні мови, такі як C/C++.

Використання методу hashCode().

Він повертає хеш-значення, яке використовується для пошуку об’єктів у колекції. JVM (Віртуальна машина Java) використовує метод хеш-коду під час збереження об’єктів у структурах даних, пов’язаних із хешуванням, як-от HashSet, HashMap, Hashtable тощо. Основна перевага збереження об’єктів на основі хеш-коду полягає в тому, що пошук стає легким.

Примітка: Перевизначити hashCode() метод потрібно зробити так, щоб для кожного об’єкта ми генерували унікальний номер. Наприклад, для класу Student ми можемо повернути номер рулону. студента з методу hashCode(), оскільки він унікальний.

Java




// Java program to demonstrate working of> // hashCode() and toString()> public> class> Student {> >static> int> last_roll =>100>;> >int> roll_no;> >// Constructor> >Student()> >{> >roll_no = last_roll;> >last_roll++;> >}> >// Overriding hashCode()> >@Override> public> int> hashCode() {>return> roll_no; }> >// Driver code> >public> static> void> main(String args[])> >{> >Student s =>new> Student();> >// Below two statements are equivalent> >System.out.println(s);> >System.out.println(s.toString());> >}> }>

>

підрядок java

>

Вихід:

Student@64 Student@64>

Зверніть увагу, що 4*160+ 6*161= 100

3. метод equals(Object obj).

Він порівнює заданий об’єкт із цим об’єктом (об’єктом, для якого викликається метод). Це дає загальний спосіб порівняння об’єктів на рівність. Рекомендується перевизначати дорівнює (Object obj) метод для отримання нашої власної умови рівності об’єктів. Щоб дізнатися більше про перевизначення методу equals(Object obj), зверніться до – Перевизначення методу дорівнює в Java

Примітка: Зазвичай необхідно перевизначати hashCode() кожного разу, коли цей метод перевизначено, щоб підтримувати загальний контракт для методу hashCode, який стверджує, що однакові об’єкти повинні мати однакові хеш-коди.

4. метод getClass().

Він повертає об’єкт класу цього об’єкта та використовується для отримання фактичного класу часу виконання об’єкта. Його також можна використовувати для отримання метаданих цього класу. Повернений об’єкт Class — це об’єкт, який заблоковано статичними синхронізованими методами представленого класу. Оскільки він остаточний, ми не скасовуємо його.

Java




// Java program to demonstrate working of getClass()> public> class> Test {> >public> static> void> main(String[] args)> >{> >Object obj =>new> String(>'GeeksForGeeks'>);> >Class c = obj.getClass();> >System.out.println(>'Class of Object obj is : '> >+ c.getName());> >}> }>

>

>

Вихід:

Class of Object obj is : java.lang.String>

Примітка: Після завантаження файлу .class JVM створить об’єкт типу java.lang.Class в районі Купи. Ми можемо використовувати цей об’єкт класу для отримання інформації про рівень класу. Він широко використовується в Рефлексія

5. метод finalize().

Цей метод викликається безпосередньо перед збиранням сміття. Це називається Збирач сміття на об’єкті, коли збирач сміття визначає, що більше немає посилань на об’єкт. Ми повинні перевизначити метод finalize(), щоб позбутися системних ресурсів, виконати дії з очищення та мінімізувати витоки пам’яті. Наприклад, перед знищенням веб-контейнера об’єктів Servlet завжди викликається метод finalize для виконання дій з очищення сеансу.

Примітка: Метод finalize називається просто один раз на об’єкт, навіть якщо цей об’єкт придатний для збирання сміття кілька разів.

Java

віртуальна машина java




// Java program to demonstrate working of finalize()> public> class> Test {> >public> static> void> main(String[] args)> >{> >Test t =>new> Test();> >System.out.println(t.hashCode());> >t =>null>;> >// calling garbage collector> >System.gc();> >System.out.println(>'end'>);> >}> >@Override> protected> void> finalize()> >{> >System.out.println(>'finalize method called'>);> >}> }>

>

>

Вихід:

1510467688 finalize method called end>

6. метод clone().

Він повертає новий об’єкт, який точно такий же, як цей об’єкт. Метод clone() див Clone() .

Решта три способи чекай() , повідомляти () notifyAll() пов’язані з паралельністю. Відноситься до Міжпотокове спілкування в Java для деталей.

Приклад використання всіх методів класу Object у Java

нульова перевірка java

Java




import> java.io.*;> public> class> Book>implements> Cloneable {> >private> String title;> >private> String author;> >private> int> year;> >public> Book(String title, String author,>int> year)> >{> >this>.title = title;> >this>.author = author;> >this>.year = year;> >}> >// Override the toString method> >@Override> public> String toString()> >{> >return> title +>' by '> + author +>' ('> + year +>')'>;> >}> >// Override the equals method> >@Override> public> boolean> equals(Object obj)> >{> >if> (obj ==>null> || !(obj>instanceof> Book)) {> >return> false>;> >}> >Book other = (Book)obj;> >return> this>.title.equals(other.getTitle())> >&&>this>.author.equals(other.getAuthor())> >&&>this>.year == other.getYear();> >}> >// Override the hashCode method> >@Override> public> int> hashCode()> >{> >int> result =>17>;> >result =>31> * result + title.hashCode();> >result =>31> * result + author.hashCode();> >result =>31> * result + year;> >return> result;> >}> >// Override the clone method> >@Override> public> Book clone()> >{> >try> {> >return> (Book)>super>.clone();> >}> >catch> (CloneNotSupportedException e) {> >throw> new> AssertionError();> >}> >}> >// Override the finalize method> >@Override> protected> void> finalize()>throws> Throwable> >{> >System.out.println(>'Finalizing '> +>this>);> >}> >public> String getTitle() {>return> title; }> >public> String getAuthor() {>return> author; }> >public> int> getYear() {>return> year; }> >public> static> void> main(String[] args)> >{> >// Create a Book object and print its details> >Book book1 =>new> Book(> >'The Hitchhiker's Guide to the Galaxy'>,> >'Douglas Adams'>,>1979>);> >System.out.println(book1);> >// Create a clone of the Book object and print its> >// details> >Book book2 = book1.clone();> >System.out.println(book2);> >// Check if the two objects are equal> >System.out.println(>'book1 equals book2: '> >+ book1.equals(book2));> >// Get the hash code of the two objects> >System.out.println(>'book1 hash code: '> >+ book1.hashCode());> >System.out.println(>'book2 hash code: '> >+ book2.hashCode());> >// Set book1 to null to trigger garbage collection> >// and finalize method> >book1 =>null>;> >System.gc();> >}> }>

>

>

Вихід

The Hitchhiker's Guide to the Galaxy by Douglas Adams (1979) The Hitchhiker's Guide to the Galaxy by Douglas Adams (1979) book1 equals book2: true book1 hash code: 1840214527 book2 hash code: 1840214527>