Clase Object en Java con Ejemplos

Clases

Java define una clase especial llamada Object que es una superclase implícita de todas las demás clases. En otras palabras, todas las demás clases son subclases de Object. Esto significa que una variable de referencia de tipo Object puede referirse a un objeto de cualquier otra clase.

1. Clase Object

Además, dado que los arrays se implementan como clases, una variable de tipo Object también puede referirse a cualquier matriz. Object define los siguientes métodos, lo que significa que están disponibles en cada objeto:

Tabla de Métodos de la Clase Object en Java
MétodoSintaxisPropósito
getClassclass _ getClass()Obtiene la clase de un objeto en tiempo de ejecución
hashCodeint hashCodeDevuelve el código hash asociado con el objeto invocado
equalsboolean equals(Object obj)Determina si un objeto es igual a otro
cloneObject clone()Crea un nuevo objeto que es el mismo que el objeto que se está clonando
toStringString toString()Devuelve una cadena que describe el objeto
notifyvoid notify()Reanuda la ejecución de un hilo esperando en el objeto invocado
notifyAllvoid notifyAll()Reanuda la ejecución de todo el hilo esperando en el objeto invocado
waitvoid wait(long timeout)Espera en otro hilo de ejecución
waitvoid wait(long timeout,int nanos)Espera en otro hilo de ejecución
wait()void wait()Espera en otro hilo de ejecución
finalizevoid finalize()Determina si un objeto es reciclado (obsoleto por JDK9)
Los métodos getClass(), notify(), notifyAll() y wait() se declaran como finales. Puede anular a los demás.

Varios de estos métodos se describen más adelante en este blog de Java. Sin embargo, observe dos métodos ahora: equals() y toString(). El método equals() compara dos objetos. Devuelve true si los objetos son equivalentes, y false de lo contrario. El método toString() devuelve una cadena que contiene una descripción del objeto al que se llama. Además, este método se invoca automáticamente cuando se genera un objeto utilizando println(). Muchas clases anulan este método. Al hacerlo, les permite adaptar una descripción específicamente para los tipos de objetos que crean.

Un último punto: observe la sintaxis inusual en el tipo de devolución para getClass(). Esto se relaciona con la característica de genéricos de Java. Los genéricos permiten que el tipo de datos utilizados por una clase o método se especifique como un parámetro. Los genéricos se discuten más adelante.

2. Usando métodos de la clase Object

Existen 11 métodos en la clase Object:

2.1. toString()

toString() proporciona la representación String de un Objeto y se usa para convertir un objeto a Cadena (String). El método predeterminado toString() para la clase Object devuelve una cadena que consiste en el nombre de la clase de la cual el objeto es una instancia, el carácter arroba ‘@’ y la representación hexadecimal sin signo del código hash del objeto. En otras palabras, se define como:

// El comportamiento predeterminado de toString () es
// imprimir el nombre de la clase, luego @, luego la representación hexadecimal 
// sin firmar del código hash del objeto
public String toString()
{
 return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

Siempre se recomienda sobrescribir el método toString() para obtener nuestra propia representación String de Object.

Nota: Siempre que intentemos imprimir cualquier referencia a Object, se llamará internamente al método toString().

2.2. hashCode ()

Para cada objeto, JVM genera un número único que es hashcode. Devuelve enteros distintos para objetos distintos. Un error común sobre este método es que el método hashCode() devuelve la dirección del objeto, lo que no es correcto. Convierte la dirección interna del objeto en un entero usando 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 el hashing como HashSet, HashMap, Hashtable, etc. La principal ventaja de guardar objetos en base al código hash es que la búsqueda se vuelve más fácil.
//Programa Java para demostrar el funcionamiento de
// hashCode() y toString()
class JDC {
    static int a=100;
    int b;

    //Constructor
    JDC(){
        b=a;
        a++;
    }

    //Anulando hashCode()
    @Override
    public int hashCode()
    {
        return b;
    }
    public static void main(String args[])
    {
        JDC s = new JDC();

        // Las dos declaraciones son equivalentes
        System.out.println(s);
        System.out.println(s.toString());
    }
}

Salida:

[email protected]
[email protected]
Nota: La anulación del método hashCode() debe hacerse de tal manera que para cada objeto generemos un número único. Por ejemplo, para una clase de JDC podemos devolver b del método hashCode() ya que es único.

2.3. equals(Object obj)

Compara el objeto dado con el objeto “this” (el objeto sobre el que se llama el 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 Objects.

Nota: En general, es necesario anular el método hashCode() siempre que se anule 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.

2.4. getClass()

Devuelve la clase de “este” objeto y se utiliza para obtener la clase en tiempo de ejecución real del objeto. También se puede usar para obtener metadatos de esta clase. El objeto Class devuelto es el objeto que está bloqueado por métodos estáticos sincronizados de la clase representada. Como es final, no lo anulamos.

// Programa de Java para demostrar getClass()
public class JDC
{
    public static void main(String[] args)
    {
        Object obj = new String("JavadesdeCero");
        Class c = obj.getClass();
        System.out.println("Clase del Objeto obj es : "
                + c.getName());
    }
}

Salida:

Clase del Objeto obj es : java.lang.String
Nota: Después de cargar un archivo .class, la 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 Reflection.

2.5. Método finalize()

Este método se llama justo antes de que un objeto sea basura recolectada (garbage collected). Es invocado por el recolector de basura en un objeto cuando el recolector de basura determina que no hay más referencias al objeto.

Debemos anular el método finalize() para eliminar los recursos del sistema, realizar actividades de limpieza y minimizar las pérdidas de memoria. Por ejemplo, antes de destruir el contenedor web de objetos Servlet, siempre se llama 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 sea elegible para la recolección de basura varias veces.

2.6. Método clone()

Devuelve un nuevo objeto que es exactamente el mismo que “este” objeto.

Los tres métodos restantes wait(), notify(), notifyAll() están relacionadas con la concurrencia. Y lo veremos más adelante, incluso también los antes mencionados con varios ejemplos…

Clases en Java
  • Clase Object

Sobre el Autor:

Hey hola! Yo soy Alex Walton y tengo el placer de compartir conocimientos hacía ti sobre el tema de Programación en Java, desde cero, Online y Gratis.

Deja una Respuesta

*

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.