logo

Clasa de obiecte în Java

Obiect clasa este prezentă în java.lang pachet. Fiecare clasă din Java este derivată direct sau indirect din Obiect clasă. Dacă o clasă nu extinde nicio altă clasă, atunci este o clasă secundară directă a Obiect iar dacă extinde o altă clasă atunci este derivată indirect. Prin urmare, metodele clasei Object sunt disponibile pentru toate clasele Java. Prin urmare, clasa Object acționează ca o rădăcină a ierarhiei de moștenire în orice program Java.

Clasa de obiecte în Java

Utilizarea metodelor clasei obiect

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

1. metoda toString().

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 instanță obiectul este o instanță, caracterul at-sign „@” și reprezentarea hexazecimală nesemnată a codului hash al obiectului. Cu alte cuvinte, este definit ca:

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

Este întotdeauna recomandat să anulați toString() metoda pentru a obține propria noastră reprezentare String a obiectului. Pentru mai multe despre înlocuirea metodei toString() consultați - Suprascrierea toString() în Java

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

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

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ă.

Notă: 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ă.

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

>

>

Ieșire:

Student@64 Student@64>

Rețineți că 4*160+ 6*161= 100

3. metoda equals(Object obj).

Compară obiectul dat cu acest obiect (obiectul pe care este apelată metoda). Oferă o modalitate generică de a compara obiectele pentru egalitate. Se recomandă să anulați este egal(obiect obiect) metodă de a obține propria noastră condiție de egalitate asupra obiectelor. Pentru mai multe despre metoda override of equals(Object obj), consultați - Metoda de suprascriere egală în Java

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

4. metoda getClass().

Returnează obiectul de clasă al acestui obiect și este folosit pentru a obține clasa de rulare reală 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.

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

>

>

Ieșire:

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

Notă: 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().

Această metodă 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 de sistem, 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, întotdeauna numită metoda finalize pentru a efectua activități de curățare a sesiunii.

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

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

>

>

Ieșire:

1510467688 finalize method called end>

6. metoda clone().

Returnează un nou obiect care este exact același cu acest obiect. Pentru metoda clone() consultați Clonează() .

bara de adrese cromată

Celelalte trei metode aștepta() , notifica() notifyAll() sunt legate de concurență. A se referi la Comunicare inter-thread în Java pentru detalii.

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

>

>

Ieșire

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>