logo

Clasa de obiecte în Java

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

inurl:.git/head
  • 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' title=

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 .