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

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

Клас об'єкта в Java присутній в java.lang пакет.

  • Кожен клас прямо чи опосередковано є похідним від класу Object. Якщо клас не розширює жодного іншого класу, то він є прямим дочірнім класом Клас об'єктів Java і якщо він розширює інший клас, то він є опосередковано похідним.
  • Клас Object надає кілька методів, наприклад toString()equals() hashCode() та багато інших.
  • Клас Object діє як корінь ієрархії успадкування в будь-якій програмі Java.

Тут ми використовуємо toString() і hashCode() методи класу Object щоб забезпечити спеціальне представлення рядка для класу .

Java
   // Java Code to demonstrate Object class   class   Person     {      String     n  ;     //name      // Constructor      public     Person  (  String     n  )     {      this  .  n     =     n  ;      }      // Override toString() for a       // custom string representation      @Override      public     String     toString  ()     {      return     'Person{name:''     +     n     +     ''}'  ;      }      public     static     void     main  (  String  []     args  )     {          Person     p     =     new     Person  (  'Geek'  );          // Custom string representation      System  .  out  .  println  (  p  .  toString  ());          // Default hash code value      System  .  out  .  println  (  p  .  hashCode  ());         }   }   

Вихід
Person{name:'Geek'} 321001045  

Пояснення: У наведеному вище прикладі ми замінюємо toString() метод надання a настроюване рядкове представлення класу Person і використовуйте hashCode() метод для відображення значення хеш-коду об’єкта за замовчуванням.

Методи класу об’єктів

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

  • метод toString().
  • метод hashCode().
  • метод equals(Object obj).
  • метод finalize().
  • метод getClass().
  • метод clone().
  • wait() notify() notifyAll() (методи паралелізму)
Методи класу об’єктів у Java

1. Метод toString().

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

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

приклад:

публічний клас Студент {

public String toString() {

повернути 'Об'єкт студента';

}

}

Пояснення: Метод toString() перевизначено, щоб повернути настроюване рядкове представлення об’єкта Student.

2. Метод hashCode().

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

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

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

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

приклад:

публічний клас Студент {

int roll;

@Override

public int hashCode() {

зворотний рулон;

}

}

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

3. Метод дорівнює (Object obj).

The дорівнює() метод порівнює даний об'єкт з поточним об'єктом. Рекомендується замінити цей метод, щоб визначити власні умови рівності.

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

приклад:

публічний клас Студент {

int roll;


@Override

public boolean equals(Object o) {

if (примірник Student) {

return this.roll == ((Студент) o).roll;

}

повернути false;

}

}

Пояснення: The дорівнює() метод перевизначено для порівняння рол між двома об’єктами Student.

4. метод getClass().

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

приклад:

Java
   // Demonstrate working of getClass()   public     class   Geeks     {      public     static     void     main  (  String  []     args  )      {      Object     o     =     new     String  (  'GeeksForGeeks'  );      Class     c     =     o  .  getClass  ();      System  .  out  .  println  (  'Class of Object o is: '      +     c  .  getName  ());      }   }   

Вихід
Class of Object o is: java.lang.String  

Пояснення: The getClass() метод використовується для друку класу часу виконання об'єкта 'o'.

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

5. метод finalize().

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

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

приклад:

Java
   // Demonstrate working of finalize()   public     class   Geeks     {      public     static     void     main  (  String  []     args  )     {          Geeks     t     =     new     Geeks  ();      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 end finalize method called  

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

6. метод clone(). 

The клонувати() метод створює та повертає новий об’єкт, який є копією поточного об’єкта.

приклад:

публічний клас Book реалізує Cloneable {

приватний рядок t; //заголовок


public Book(String t) {

this.t = t;

}

@Override

public Object clone() кидає CloneNotSupportedException {

повернути super.clone();

}

}

Пояснення: The клонувати() метод перевизначено для повернення клонованої копії Книжковий об'єкт .

7. Методи паралелізму: wait() notify() і notifyAll()

Ці методи пов'язані з потокове спілкування в Java . Вони використовуються, щоб змусити потоки чекати або сповістити інших у паралельному програмуванні.

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

Java
   import     java.io.*  ;   public     class   Book     implements     Cloneable     {      private     String     t  ;     // title      private     String     a  ;     // author      private     int     y  ;     // year      public     Book  (  String     t       String     a       int     y  )      {      this  .  t     =     t  ;      this  .  a     =     a  ;      this  .  y     =     y  ;      }      // Override the toString method      @Override     public     String     toString  ()      {      return     t     +     ' by '     +     a     +     ' ('     +     y     +     ')'  ;      }      // Override the equals method      @Override     public     boolean     equals  (  Object     o  )      {      if     (  o     ==     null     ||     !  (  o     instanceof     Book  ))     {      return     false  ;      }      Book     other     =     (  Book  )  o  ;      return     this  .  t  .  equals  (  other  .  getTitle  ())      &&     this  .  a  .  equals  (  other  .  getAuthor  ())      &&     this  .  y     ==     other  .  getYear  ();      }      // Override the hashCode method      @Override     public     int     hashCode  ()      {      int     res     =     17  ;      res     =     31     *     res     +     t  .  hashCode  ();      res     =     31     *     res     +     a  .  hashCode  ();      res     =     31     *     res     +     y  ;      return     res  ;      }      // 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     t  ;     }      public     String     getAuthor  ()     {     return     a  ;     }      public     int     getYear  ()     {     return     y  ;     }      public     static     void     main  (  String  []     args  )      {      // Create a Book object and print its details      Book     b1     =     new     Book  (      'The Hitchhiker's Guide to the Galaxy'        'Douglas Adams'       1979  );      System  .  out  .  println  (  b1  );      // Create a clone of the Book object and print its      // details      Book     b2     =     b1  .  clone  ();      System  .  out  .  println  (  b2  );      // Check if the two objects are equal      System  .  out  .  println  (  'b1 equals b2: '      +     b1  .  equals  (  b2  ));      // Get the hash code of the two objects      System  .  out  .  println  (  'b1 hash code: '      +     b1  .  hashCode  ());      System  .  out  .  println  (  'b2 hash code: '      +     b2  .  hashCode  ());      // Set book1 to null to trigger garbage collection      // and finalize method      b1     =     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) b1 equals b2: true b1 hash code: 1840214527 b2 hash code: 1840214527  

Пояснення: Наведений вище приклад демонструє використання toString() дорівнює() hashCode() і клонувати() методи в Книжковий клас .