Sei sulla pagina 1di 8

TODO SOBRE LA CLASE OBJECT

La clase Object, como ya se ha indicado anteriormente, es la clase raz de todo el rbol de la jerarqua de clases Java, y
proporciona un cierto nmero de mtodos de utilidad general que pueden utilizar todos los objetos. La lista completa se
puede ver en la documentacin del API de Java, aqu solamente se tratarn algunos de ellos; por
ejemplo, Object proporciona:

Un mtodo por el que un objeto se puede comparar con otro objeto

Un mtodo para convertir un objeto a una cadena

Un mtodo para esperar a que ocurra una determinada condicin

Un mtodo para notificar a otros objetos que una condicin ha cambiado

Un mtodo para devolver la clase de un objeto

El mtodo equals()
public boolean equals( Object obj );
Todas las clases que se definan en Java heredarn el mtodo equals(), que se puede utilizar para comparar dos objetos.
Esta comparacin no es la misma que proporciona el operador ==, que solamente compara si dos referencias a objetos
apuntan al mismo objeto.
El mtodo equals() se utiliza para saber si dos objetos separados son del mismo tipo y contienen los mismos datos. El
mtodo devuelve true si los objetos son iguales y false en caso contrario.
El sistema ya sabe de antemano cmo aplicar el mtodo a todas las clases estndar y a todos los objetos de los que el
compilador tiene conocimiento. Por ejemplo, se puede usar directamente para saber si dos objetos String son iguales.
Las subclases pueden sobreescribir el mtodo equals() para realizar la adecuada comparacin entre dos objetos de un tipo
que haya sido definido por el programador. En la aplicacin de ejemplo siguiente, java511.java, se sobreescribe el mtodo
para comparar dos objetos de la nueva clase que crea la aplicacin.
Hay que observar que en la lista de argumentos del mtodo equals() hay que pasarle un argumento de tipo Object. Si se
define un mtodo con un argumento de tipo diferente, se estar sobrecargando el mtodo, no sobreescribindolo.
En el ejemplo, una vez que se ejecuta, es necesario hacer un moldeo del argumento al tipo de la clase antes de intentar
realizar la comparacin. Se utiliza el operador instanceof para confirmar que el objeto es del tipo correcto. Uno de los
objetos proporcionados para comprobar su equivalencia es de tipo errneo (String) y el mtodo sobreescrito equals()
indicar que no es un objeto equivalente.
class java511 {
int miDato;

// Constructor parametrizado
java511( int dato ) {
miDato = dato; }
public static void main(String args[] ) {
// Se instancian los objetos que se van a testear
java511 obj1 = new java511( 2 );
java511 obj2 = new java511( 2 );
java511 obj3 = new java511( 3 );
String obj4 = "Un objeto String";

// Se realizan las comprobaciones y se presenta por pantalla


// el resultado de cada una de ellas
System.out.println( "obj1 equals obj1: " +
obj1.equals( obj1 ) );
System.out.println( "obj1 equals obj2: " +
obj1.equals( obj2 ) );
System.out.println( "obj1 equals obj3: " +
obj1.equals( obj3 ) );
System.out.println( "obj1 equals obj4: " +
obj1.equals( obj4 ) );
}
// Se sobreescribe el metodo equals()
public boolean equals( Object arg ) {
// Se comprueba que el argumento es del tipo adecuado y
// que no es nulo. Si lo anterior se cumple se realiza
// la comprobacion de equivalencia de los datos.
// Observese que se ha empleado el operador instanceof
if( (arg != null) && (arg instanceof java511) ) {
// Hacemos un moldeado del Object general a tipo java511
java511 temp = (java511)arg;

// Se realiza la comparacion y se devuelve el resultado


return( this.miDato == temp.miDato );
}
else {
// No es del tipo esperado
return( false );
}}}
El mtodo getClass()
public final native Class getClass();
En Java existe la clase Class, que se define de la forma (la declaracin no est completa, consultar el API de Java para
ello):
public final class java.lang.Class extends java.lang.Object {
// Mtodos
public static Class forName(String className);
public ClassLoader getClassLoader();

public Class[] getClasses();


public Class getComponentType();
public Constructor getConstructor(Class[] parameterTypes);
public Constructor[] getConstructors();
public Class[] getDeclaredClasses();
public Constructor[] getDeclaredConstructors();
public Field getDeclaredField(String name);
public Field[] getDeclaredFields();
public Method getDeclaredMethod(String name, Class[] parTypes);
public Method[] getDeclaredMethods();
public Class getDeclaringClass();
public Field getField(String name);
public Field[] getFields();
public Class[] getInterfaces();
public Method getMethod(String name, Class[] parameterTypes);
public Method[] getMethods();
public int getModifiers();
public String getName();
public URL getResource(String name);
public InputStream getResourceAsStream(String name);
public Object[] getSigners();
public Class getSuperclass();
public boolean isArray();
Instancias de la clase Class representan las clases e interfaces que est ejecutando la aplicacin Java. No hay un
constructor para la clase Class, sus objetos son construidos automticamente por la Mquina Virtual Java (JVM) cuando las
clases son cargadas, o por llamadas al mtodo defineClass() del cargados de clases.
Es una clase importante porque se le pueden realizar peticiones de informacin sobre objetos, como cul es su nombre o
cmo se llama su superclase.
El mtodo getClass() de la clase Object se puede utilizar para determinar la clase de un objeto. Es decir, devuelve un objeto
de tipo Class, que contiene informacin importante sobre el objeto que crea la clase. Una vez determinada la clase del
objeto, se pueden utilizar los mtodos de la clase Class para obtener informacin acerca del objeto.
Adems, habiendo determinado la clase del objeto, el mtodo newInstance() de la clase Class puede invocarse para
instanciar otro objeto del mismo tipo. El resultado es que el operador new ser utilizado con un constructor de una clase
conocida.
Hay que hacer notar que la ltima afirmacin del prrafo anterior es una situacin que el compilador no conoce en tiempo
de compilacin, es decir, no sabe el tipo del objeto que va a ser instanciado. Por lo tanto, si se necesita referenciar al nuevo
objeto, es necesario declarar la variable de referencia del tipo genrico Object, aunque el objeto actual tomar todos los
atributos de la subclase actual por la que ser instanciado.
Hay que hacer notar que el mtodo getClass() es un mtodo final y no puede ser sobreescrito. Devuelve un objeto de tipo
Class que permite el uso de los mtodos definidos en la clase Class sobre ese objeto.

El siguiente programa, java512.java, ilustra alguna de estas caractersticas. Primero, instancia un objeto, mira la clase de
ese objeto y utiliza alguno de los mtodos de la clase Class para obtener y presentar informacin acerca del objeto. Luego,
pregunta al usuario si quiere instanciar un nuevo objeto, instanciando un objeto de tipo String en un caso o, en el otro caso,
se aplica el mtodo getClass() a un objeto existente y utilizando el mtodo newInstance() se instancia un nuevo objeto del
mismo tipo.
import java.io.*;
class java512 {
public static void main( String args[] ) {
java512 obj1 = new java512();
// Se usa el metodo getClass() de la clase Object y dos
// metodos de la clase Class para obtener y presentar
// informacion acerca del objeto
System.out.println( "Nombre de la clase de obj1: "
+ obj1.getClass().getName() );
System.out.println( "Nombre de la superclase de obj1: "
+ obj1.getClass().getSuperclass() );
// Ahora se instancia otro objeto basandose en la entrada
// del usuario, de forma que el compilador no tiene forma
// de conocer el tipo del objeto en tiempo de compilacion
// Se declara una referencia a un objeto generico
Object obj2 = null;
// Se pide la entrada al usuario
System.out.println( "Introduce un 0 o un 1" );
try {
// Captura la entrada del usuario
int dato = System.in.read();
// Si se ha introducido un 0
if( (char)dato == '0' )
// Se crea un objeto String
obj2 = "Esto es un objeto String";
// Sino, se crea un nuevo objeto del mismo tipo
// que el anterior
else
obj2 = obj1.getClass().newInstance();
} catch( Exception e ) {
System.out.println( "Excepcion " + e );

// Ahora se indican la clase y superclase del nuevo objeto


System.out.println( "Nombre de la clase de obj2: "
+ obj2.getClass().getName() );

System.out.println( "Nombre de la superclase de obj2: "


+ obj2.getClass().getSuperclass());
}

El mtodo toString()
public String toString();
La clase Object dispone de este mtodo que puede usarse para convertir todos los objetos conocidos por el compilador a
algn tipo de representacin de cadena, que depender del objeto.
Por ejemplo, el mtodo toString() extrae el entero contenido en un objeto Integer. De forma similar, si se aplica el mtodo
toString() al objeto Thread, se puede obtener informacin importante acerca de los threads y presentarla como cadena.
Este mtodo tambin se puede sobreescribir, o redefinir, para convertir los objetos definidos por el programador a cadenas.
El programa siguiente, java513.java, redefine el mtodo toString() de una clase recin definida para que pueda utilizarse en
la conversin de objetos de esta clase a cadenas.
class java513 {
// Se definen las variables de instancia para la clase
String uno;
String dos;
String tres;
// Constructor de la clase
java513( String a,String b,String c ) {
uno = a;
dos = b;
tres = c;}
public static void main( String args[] ) {
// Se instancia un objeto de la clase
java513 obj = new java513( "Tutorial","de","Java" );
// Se presenta el objeto utilizando el metodo sobreescrito
System.out.println( obj.toString() );
}
// Sobreescritura del metodo toString() de la clase Object
public String toString() {
// Convierte un objeto a cadena y lo devuelve
return( uno+" "+dos+" "+tres );
}

Otros Mtodos
Hay otros mtodos tiles en la clase Object que son, o sern, discutidos en otras secciones de este documento. Por
ejemplo, el mtodo
protected void finalize();
que se tratar en el apartado de finalizadores. O tambin, los mtodos que se utilizan en la programacin de threads para
hacer que varios threads se sincronicen, como son
public final void wait();

public final native void wait( long timeout );


public final native void notify();

TIPOS DE VARIABLES
Las variables son posiciones de memoria reservadas para almacenar valores. Esto significa que
cuando se crea una variable para reservar algo se crea un espacio en la memoria.
Existen dos tipos de datos disponibles en Java:

Tipos de datos primitivos.

Tipos de datos de referencia.

Tipos de datos primitivos


Hay ocho tipos de datos primitivos soportados por Java. Los tipos de datos primitivos estn
predefinidos por el lenguaje y nombrados por una palabra clave. Veamos ahora en detalle acerca
de los ocho tipos de datos primitivos.
Byte

Tipo de datos Byte es un entero de 8 bits.

El valor mnimo es -128 (-2 ^ 7).

El valor mximo es 127 (inclusive) (2 ^ 7 -1).

El valor por defecto es 0.

Tipo de datos Byte se utiliza para ahorrar espacio en grandes conjuntos, sobre todo en el
lugar de los nmeros enteros, ya que un byte es cuatro veces ms pequeo que un int.

Ejemplo: byte a = 100, byte b = -50

Short

Tipo de datos Short es un entero de 16 bits.

El valor mnimo es -32,768 (-2 ^ 15).

El valor mximo es de 32.767 (inclusive) (2 ^ 15 -1).

Tipo de datos Short tambin se puede utilizar para ahorrar memoria como tipo de datos
byte. Un tipo de dato short es 2 veces ms pequeo que un int.

Int

El valor por defecto es 0.

Ejemplo: short s = 10000, short r = -20000

Tipo de datos int es un entero de 32 bits.

El valor mnimo es -2147483648 (-2 ^ 31).

El valor mximo es 2147483647 (inclusive)(2 ^ 31 -1).

Int. se utiliza generalmente como el tipo de datos predeterminado para los valores
enteros a menos que exista una preocupacin acerca de la memoria.

El valor por defecto es 0.

Ejemplo: int a = 100000, int b = -200000

Long

Tipo de datos Long es un entero de 64 bits.

El valor mnimo es -9223372036854775808 (-2 ^ 63).

El valor mximo es 9223372036854775807 (inclusive) (2 ^ 63 -1).

Este tipo se utiliza cuando se necesita una gama ms amplia que int.

El valor por defecto es 0.

Ejemplo: long a = 100000, int b =-200000

Float

El Float es un dato de coma flotante de precisin simple de 32 bits.

Float se utiliza principalmente para ahorrar memoria en grandes arrays de nmeros.

El valor por defecto es 0,0 f.

Ejemplo: float f1 = 234.5f

Double

El doble es un dato de coma flotante de doble precisin de 64 bits.

Este tipo de datos se utiliza generalmente como el tipo de datos predeterminado para
valores decimales, en general, la opcin por defecto.

El valor por defecto es 0.0 D.

Ejemplo: doble d1 = 123,4

Boolean

Boolean representa un bit de informacin.

Slo hay dos posibles valores: true y false.

Este tipo de datos se utiliza para indicadores simples que hacen un seguimiento de
condiciones.

El valor predeterminado es falso.

Ejemplo: boolean a = true

Char

Char es un carcter Unicode de 16 bits.

El valor mnimo es '\u0000' (o 0).

El valor mximo es '\uffff' (o 65.535 inclusive).

Tipo de datos char se utiliza para almacenar cualquier carcter.

Ejemplo: char letra = 'A

Tipos de datos de referencia

Las variables de referencia se crean mediante constructores definidos de las clases. Se


utilizan para acceder a los objetos. Estas variables se declaran de un tipo especfico que
no se puede cambiar.

Objetos de la Clase, y varios tipos de variables de array estn bajo tipo de datos de
referencia.

El valor predeterminado de cualquier variable de referencia es nulo.

Una variable de referencia se puede utilizar para referirse a cualquier objeto del tipo
declarado o cualquier tipo compatible.

Ejemplo: Carro unCarro = new Carro ("Ford");

Potrebbero piacerti anche