La clase de objeto está presente en el paquete java.lang . Cada clase en Java se deriva directa o indirectamente de la clase Object . Si una clase no se extiende a ninguna otra clase, entonces es una clase secundaria directa de Object y si se extiende a otra clase, se deriva indirectamente. Por lo tanto, los métodos de la clase Object están disponibles para todas las clases de Java. Por lo tanto, la clase de objeto actúa como la raíz de la jerarquía de herencia en cualquier programa Java.
Uso de métodos de clase de objeto
Hay métodos en la clase Object :
1. toString(): toString() proporciona una representación de string de un objeto y se utiliza para convertir un objeto en string. El método predeterminado toString() para la clase Object devuelve una string que consta del nombre de la clase de la que el objeto es una instancia, el carácter de arroba `@’ y la representación hexadecimal sin signo del código hash del objeto. En otras palabras, se define como:
// 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()); }
Siempre se recomienda anular el método toString() para obtener nuestra propia representación String de Object. Para obtener más información sobre la anulación del método toString(), consulte – Anulación de toString() en Java
Nota: Cada vez que intentamos imprimir cualquier referencia de objeto, se llama internamente al método toString().
Student s = new Student(); // Below two statements are equivalent System.out.println(s); System.out.println(s.toString());
2. hashCode(): para cada objeto, JVM genera un número único que es hashcode. Devuelve enteros distintos para objetos distintos. Un concepto erróneo común sobre este método es que el método hashCode() devuelve la dirección del objeto, lo cual no es correcto. Convierte la dirección interna del objeto en un número entero mediante el uso de un algoritmo. El método hashCode() es nativo porque en Java es imposible encontrar la dirección de un objeto, por lo que usa lenguajes nativos como C/C++ para encontrar la dirección del objeto.
Uso del método hashCode(): Devuelve un valor hash que se utiliza para buscar objetos en una colección. JVM (Java Virtual Machine) utiliza el método hashcode al guardar objetos en estructuras de datos relacionadas con hash como HashSet, HashMap, Hashtable, etc. La principal ventaja de guardar objetos basados en código hash es que la búsqueda se vuelve fácil.
Nota: La anulación del método hashCode() debe realizarse de manera que para cada objeto generemos un número único. Por ejemplo, para una clase de Estudiante, podemos devolver el rollo no. de un estudiante del método hashCode() ya que es único.
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()); } }
Producción :
Student@64 Student@64
Tenga en cuenta que 4*16 0 + 6*16 1 = 100
3. equals(Object obj): Compara el objeto dado con “este” objeto (el objeto sobre el que se llama al método). Da una forma genérica de comparar objetos para la igualdad. Se recomienda anular el método equals(Object obj) para obtener nuestra propia condición de igualdad en los Objetos. Para obtener más información sobre la anulación del método equals(Object obj), consulte – Anulación del método equals en Java
Nota: por lo general, es necesario anular el método hashCode() cada vez que se anula este método, a fin de mantener el contrato general para el método hashCode, que establece que los objetos iguales deben tener códigos hash iguales.
4. getClass(): Devuelve el objeto de clase de «este» objeto y se utiliza para obtener la clase de tiempo de ejecución real del objeto. También se puede utilizar para obtener metadatos de esta clase. El objeto Class devuelto es el objeto que está bloqueado por métodos sincronizados estáticos de la clase representada. Como es final, no lo anulamos.
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()); } }
Producción:
Class of Object obj is : java.lang.String
Nota: Después de cargar un archivo .class, JVM creará un objeto del tipo java.lang.Class en el área Heap. Podemos usar este objeto de clase para obtener información de nivel de clase. Es ampliamente utilizado en Reflexión .
5. Método finalize(): Este método se llama justo antes de que un objeto sea recolectado como basura. Se llama el recolector de basura en un objeto cuando el recolector de basura determina que no hay más referencias al objeto. Deberíamos anular el método finalize() para disponer de los recursos del sistema, realizar actividades de limpieza y minimizar las fugas de memoria. Por ejemplo, antes de destruir el contenedor web de objetos Servlet, siempre llame al método finalize para realizar actividades de limpieza de la sesión.
Nota: El método finalize se llama solo una vez en un objeto, aunque ese objeto es elegible para la recolección de elementos no utilizados varias veces.
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"); } }
Producción:
366712642 finalize method called end
6. clone(): Devuelve un nuevo objeto que es exactamente igual a este objeto. Para el método clone(), consulte Clone() .
Los tres métodos restantes wait() , notificar() notificarTodos() están relacionados con la simultaneidad. Consulte Comunicación entre subprocesos en Java para obtener más detalles.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA