Clasa de obiecte în Java

Clasa de obiecte în Java

Clasa de obiecte în Java este prezent în java.lang pachet.

  • Fiecare clasă este derivată direct sau indirect din clasa Object. Dacă o clasă nu extinde nicio altă clasă, atunci este o clasă secundară directă a lui Clasa obiect Java iar dacă extinde o altă clasă atunci este derivată indirect.
  • Clasa Object oferă mai multe metode, cum ar fi toString()equals() hashCode() si multi altii.
  • Clasa Object acționează ca o rădăcină a ierarhiei de moștenire în orice program Java.

Aici folosim toString() şi hashCode() metodele clasei Object pentru a oferi o reprezentare de șir personalizată pentru o clasă .

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  ());         }   }   

Ieșire
Person{name:'Geek'} 321001045  

Explicaţie: În exemplul de mai sus suprascriem toString() metoda de a oferi a reprezentarea șir personalizată a clasei Person și folosiți hashCode() metodă pentru a afișa valoarea implicită a codului hash a obiectului.

Metode de clasă de obiecte

Clasa Object oferă mai multe metode, care sunt după cum urmează:

  • metoda toString().
  • metoda hashCode().
  • metoda equals(Object obj).
  • metoda finalize().
  • metoda getClass().
  • metoda clone().
  • wait() notify() notifyAll() (Metode de concurență)
Metode de clasă de obiecte în Java

1. Metoda toString().

The toString() oferă o reprezentare String a unui obiect și este folosit pentru a converti un obiect într-un String. Metoda implicită toString() pentru clasa Object returnează un șir format din numele clasei a cărei obiect este o instanță, caracterul at-sign „@” și reprezentarea hexazecimală nesemnată a codului hash al obiectului.

Nota: Ori de câte ori încercăm să tipărim orice referință de obiect, atunci intern metoda toString() este apelată.

Exemplu:

elev la clasă publică {

public String toString() {

returnează „Obiect student”;

}

}

Explicaţie: Metoda toString() este suprascrisă pentru a returna o reprezentare șir personalizată a obiectului Student.

2. Metoda hashCode().

Pentru fiecare obiect JVM generează un număr unic care este un cod hash. Returnează numere întregi distincte pentru obiecte distincte. O concepție greșită comună despre această metodă este că metoda hashCode() returnează adresa obiectului care nu este corectă. Convertește adresa internă a obiectului într-un număr întreg utilizând un algoritm. Metoda hashCode() este nativ deoarece în Java este imposibil să găsești adresa unui obiect, așa că folosește limbaje native precum C/C++ pentru a găsi adresa obiectului.

Utilizarea metodei hashCode():

Returnează o valoare hash care este folosită pentru a căuta obiecte dintr-o colecție. JVM (Java Virtual Machine) folosește metoda hashcode în timp ce salvează obiecte în structuri de date legate de hashing, cum ar fi HashSet HashMap Hashtable etc. Principalul avantaj al salvării obiectelor bazate pe cod hash este că căutarea devine ușoară. 

Nota: Anulare a hashCode() metoda trebuie făcută astfel încât pentru fiecare obiect să generăm un număr unic. De exemplu, pentru o clasă Studenți putem returna lista nr. a unui student din metoda hashCode() deoarece este unică. 

Exemplu:

elev la clasă publică {

rola int;

@Override

public int hashCode() {

rola de retur;

}

}

Explicaţie: The hashCode() metoda este suprascrisă pentru a returna o valoare hash personalizată bazată pe rola obiectului Student.

3. equals(Object obj) Metoda

The este egal() metoda compară obiectul dat cu obiectul curent. Se recomandă să anulați această metodă pentru a defini condițiile de egalitate personalizate.

Nota: În general, este necesar să se suprascrie hashCode() metoda ori de câte ori această metodă este suprascrisă pentru a menține contractul general pentru metoda hashCode care afirmă că obiectele egale trebuie să aibă coduri hash egale. 

Exemplu:

elev la clasă publică {

rola int;


@Override

public boolean equals(Object o) {

dacă (o instanță de Student) {

returnează aceasta.roll == ((Student) o).roll;

}

returnează fals;

}

}

Explicaţie: The este egal() metoda este înlocuită pentru a compara rostogolire între două obiecte Student.

4. metoda getClass().

The getClass() returnează obiectul de clasă al obiectului „acest” și este folosită pentru a obține clasa reală de rulare a obiectului. Poate fi folosit și pentru a obține metadatele acestei clase. Obiectul Class returnat este obiectul care este blocat prin metode statice sincronizate ale clasei reprezentate. Deoarece este final, nu îl depășim.

Exemplu:

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  ());      }   }   

Ieșire
Class of Object o is: java.lang.String  

Explicaţie: The getClass() metoda este folosită pentru a tipări clasa de rulare a obiectului „o”.

Nota: După încărcarea unui fișier .class, JVM va crea un obiect de acest tip java.lang.Class în zona Heap. Putem folosi acest obiect de clasă pentru a obține informații la nivel de clasă. Este utilizat pe scară largă în Reflecţie  

5. metoda finalize().

The finaliza () metoda este apelată chiar înainte ca un obiect să fie colectat gunoiul. Se numește Colector de gunoi pe un obiect atunci când colectorul de gunoi stabilește că nu mai există referințe la obiect. Ar trebui să suprascriem metoda finalize() pentru a elimina resursele sistemului, pentru a efectua activități de curățare și pentru a minimiza pierderile de memorie. De exemplu, înainte de a distruge containerul web de obiecte Servlet numit întotdeauna metoda finalize pentru a efectua activități de curățare a sesiunii. 

Nota: Metoda de finalizare se numește just dată pe un obiect, chiar dacă acel obiect este eligibil pentru colectarea gunoiului de mai multe ori. 

Exemplu:

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'  );      }   }   

Ieșire
1510467688 end finalize method called  

Explicaţie: The finaliza () metoda este apelată chiar înainte ca obiectul să fie colectat gunoiul.

6. metoda clone(). 

The clona() metoda creează și returnează un nou obiect care este o copie a obiectului curent.

Exemplu:

implementări de cărți de clasă publică Cloneable {

private String t; //titlu


carte publică (șir t) {

aceasta.t = t;

}

@Override

public Object clone() aruncă CloneNotSupportedException {

return super.clone();

}

}

Explicaţie: The clona() metoda este suprascrisă pentru a returna o copie clonată a fișierului Obiect de carte .

7. Metode de concurență: wait() notify() și notifyAll()

Aceste metode sunt legate de thread Comunicare în Java . Ele sunt folosite pentru a face firele să aștepte sau să notifice pe alții în programarea concomitentă.

Exemplu de utilizare a tuturor metodelor clasei de obiecte în 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  ();      }   }   

Ieșire
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  

Explicaţie: Exemplul de mai sus demonstrează utilizarea lui toString() equals() hashCode() şi clona() metode în Clasa de carte .