logo

Classe d'objectes en Java

Classe d'objectes en Java està present a java.lang paquet.

subratlla amb css
  • Cada classe es deriva directament o indirectament de la classe Object. Si una classe no amplia cap altra classe, és una classe secundaria directa de la classe Classe d'objectes Java i si amplia una altra classe llavors es deriva indirectament.
  • La classe Object proporciona diversos mètodes com ara toString()equals() hashCode() i molts altres.
  • La classe Object actua com a arrel de la jerarquia d'herència en qualsevol programa Java.

Aquí fem servir el toString() i hashCode() mètodes de la classe Object per proporcionar una representació de cadena personalitzada per a una classe .



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

Sortida
Person{name:'Geek'} 321001045 

Explicació: A l'exemple anterior substituïm el toString() mètode per proporcionar a representació de cadena personalitzada de la classe Person i utilitza el hashCode() mètode per mostrar el valor del codi hash predeterminat de l'objecte.

Mètodes de classe d'objectes

La classe Object proporciona diversos mètodes que són els següents:

  • mètode toString().
  • mètode hashCode().
  • mètode equals(Object obj).
  • mètode finalize().
  • mètode getClass().
  • mètode clone().
  • wait() notify() notifyAll() (mètodes de concurrència)
Mètodes de classe d'objectes en Java' title=

1. Mètode toString().

El toString() proporciona una representació String d'un objecte i s'utilitza per convertir un objecte en String. El mètode toString() predeterminat per a la classe Object retorna una cadena formada pel nom de la classe de la qual l'objecte és una instància, el caràcter at-sign `@' i la representació hexadecimal sense signar del codi hash de l'objecte.



Nota: Sempre que intentem imprimir qualsevol referència d'objecte, internament es crida el mètode toString().

Exemple:

estudiant de classe pública {



Public String toString() {

retornar 'Objecte estudiant';

}

}

Explicació: El mètode toString() es substitueix per retornar una representació de cadena personalitzada de l'objecte Student.

2. Mètode hashCode().

Per a cada objecte, JVM genera un número únic que és un codi hash. Retorna nombres enters diferents per a objectes diferents. Un error comú sobre aquest mètode és que el mètode hashCode() retorna l'adreça de l'objecte que no és correcta. Converteix l'adreça interna de l'objecte en un nombre enter mitjançant un algorisme. El mètode hashCode() és autòcton perquè a Java és impossible trobar l'adreça d'un objecte per la qual cosa utilitza llenguatges nadius com C/C++ per trobar l'adreça de l'objecte.

Ús del mètode hashCode():

Retorna un valor hash que s'utilitza per cercar objectes en una col·lecció. JVM (Java Virtual Machine) utilitza el mètode hashcode mentre desa objectes en estructures de dades relacionades amb hash com HashSet HashMap Hashtable, etc. El principal avantatge de desar objectes basats en codi hash és que la cerca es fa fàcil. 

Nota: Anul·lació de hashCode() El mètode s'ha de fer de manera que per a cada objecte generem un número únic. Per exemple, per a una classe d'alumnes podem retornar el rotlle núm. d'un estudiant del mètode hashCode() ja que és únic. 

Exemple:

estudiant de classe pública {

rotllo int;

@Anul·lació

public int hashCode() {

roll de retorn;

}

}

Explicació: El hashCode() s'invalida el mètode per retornar un valor hash personalitzat basat en el rol de l'objecte Student.

3. equals(Object obj) Mètode

El és igual a () El mètode compara l'objecte donat amb l'objecte actual. Es recomana anul·lar aquest mètode per definir condicions d'igualtat personalitzades.

Nota: En general, és necessari anul·lar el hashCode() sempre que aquest mètode es substitueixi per mantenir el contracte general per al mètode hashCode que estableix que els objectes iguals han de tenir codis hash iguals. 

Exemple:

estudiant de classe pública {

rotllo int;


@Anul·lació

booleà públic és igual a (Objecte o) {

if (o instància d'estudiant) {

retorna això.roll == ((Estudiant) o).roll;

}

retornar fals;

}

}

Explicació: El és igual a () s'invalida el mètode per comparar rotllo entre dos objectes Student.

4. Mètode getClass().

El getClass() El mètode retorna l'objecte de classe d'"aquest" objecte i s'utilitza per obtenir la classe d'execució real de l'objecte. També es pot utilitzar per obtenir metadades d'aquesta classe. L'objecte Class retornat és l'objecte que està bloquejat per mètodes estàtics sincronitzats de la classe representada. Com que és definitiu, no ho anul·lem.

Exemple:

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

Sortida
Class of Object o is: java.lang.String 

Explicació: El getClass() El mètode s'utilitza per imprimir la classe d'execució de l'objecte 'o'.

Nota: Després de carregar un fitxer .class, JVM crearà un objecte del tipus java.lang.Class a la zona Heap. Podem utilitzar aquest objecte de classe per obtenir informació de nivell de classe. S'utilitza àmpliament a Reflexió  

5. mètode finalize().

El finalitzar () El mètode es crida just abans que es reculli la deixalleria d'un objecte. Es diu el Recollidor d'escombraries en un objecte quan el col·lector d'escombraries determina que no hi ha més referències a l'objecte. Hauríem d'anul·lar el mètode finalize() per eliminar els recursos del sistema, realitzar activitats de neteja i minimitzar les fuites de memòria. Per exemple, abans de destruir el contenidor web d'objectes Servlet, sempre s'anomena mètode finalize per realitzar activitats de neteja de la sessió. 

Nota: El mètode finalize s'anomena just una vegada en un objecte encara que aquest objecte sigui apte per a la recollida d'escombraries diverses vegades. 

Exemple:

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

Sortida
1510467688 end finalize method called 

Explicació: El finalitzar () El mètode es crida just abans que l'objecte es reculli les escombraries.

6. mètode clone(). 

El clonar () El mètode crea i retorna un objecte nou que és una còpia de l'objecte actual.

Exemple:

implements de llibres de classe pública Clonable {

cadena privada t; //títol


llibre públic (cadena t) {

això.t = t;

}

@Anul·lació

public Object clone() llança CloneNotSupportedException {

retorna super.clone();

}

}

Explicació: El clonar () s'invalida el mètode per retornar una còpia clonada del fitxer Objecte llibre .

7. Mètodes de concurrència: wait() notify() i notifyAll()

Aquests mètodes estan relacionats amb fil Comunicació en Java . S'utilitzen per fer que els fils esperen o avisin els altres en la programació concurrent.

Exemple d'ús de tots els mètodes de classe d'objectes a 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();  } } 

Sortida
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 

Explicació: L'exemple anterior demostra l'ús de toString() equals() hashCode() i clonar () mètodes en el Classe de llibre .