constructores y como se definen. Conocer el uso de la referencia this. Conocer para que se utilizan los destructores y como se definen. CONSTRUCTOR Cuando utilizamos el operador new acompaado del nombre de una clase, se crea un objeto del tipo especificado (es decir una instancia de la clase cuyo nombre aparece al lado de new) En este momento se invoca a un mtodo especial de esa clase, que se llama constructor El constructor no devuelve ningn tipo, ni siquiera void. Puede existir ms de uno o no existir. El constructor es el encargado de inicializar el estado del objeto (sus atributos), haciendo que el objeto sea utilizable inmediatamente; reservando memoria para sus atributos, iniciando sus valores Ejemplo: Cuadrado cuadrado=new Cuadrado(); Scanner entrada=new Scanner(System.in); // para la lectura CONSTRUCTOR POR DEFECTO Java crea automticamente un constructor sin parmetros para cualquier clase que definamos. public class circulo{ // constante public final double PI=3,1416; // variables private double radio=0; // mtodos } // fin de la clase circulo Al crea un objeto de tipo circulo con new Circulo(), se llama al constructor por defecto de la clase circulo, con lo que se crea un objeto de tipo circulo cuyo estado inicial ser el indicado en la inicializacin de la variable radio y la constante PI. CONSTRUCTORES DEFINIDOS POR EL USUARIO Los lenguajes de programacin permiten definir constructores para especificar como deben inicializarse un objeto al crearlo. El nombre del constructor ha de coincidir con el nombre de la clase. public class circulo{ // constante public final double PI=3,1416; // variables private double radio; // mtodos public circulo() { this.radio=0;} } // fin de la clase circulo CONSTRUCTORES CON PARAMETROS public class circulo{ // constante public final double PI=3,1416; // variables private double radio; // mtodos public circulo(double radio){ this.radio=radio; } } // fin de la clase circulo CONSTRUCTORES CON PARAMETROS Cuando se crea un constructor con parmetros, ya no se puede usar el constructor por defecto. Ejemplo de crear un objeto de tipo cuadrado y usar el constructor. Cuadrado cuadrado = new Cuadrado(10,0); Si se quiere crear una variable de tipo cuadrado sin usar el constructor, se nos presentar un error. Para facilitarnos la creacin de objetos, Java nos permite definir varios constructores para una misma clase(siempre y cuando tengan parmetros diferentes), de tal forma que se pueda usar: Cuadrado cuadrado = new Cuadrado(10,0); // o esta otra forma Cuadrado cuadrado = new Cuadrado(); Constructores La lista de parmetros especificada despus del nombre de una clase en una sentencia new se utiliza para pasar parmetros al constructor. Se llama al mtodo constructor justo despus de crear la instancia y antes de que new devuelva el control al punto de la llamada. As, cuando tenemos el constructor en la clase MiPunto: public MiPunto(int a, int b) // constructor { x=a; // asigna los valores para el punto x,y y=b; } Constructores Cuando se crea una instancia p1 de la clase MiPunto: MiPunto p1 = new MiPunto(10, 20); Y se enva a mostrar sus valores, el resultado es: System.out.println( "p1.- x = " + p1.x + " y = " + p1.y ); Se muestra en la pantalla: p1.- x = 10 p1.y = 20 La Referencia This Java incluye un valor de referencia especial llamado this. Se utiliza dentro de cualquier mtodo para referirse al objeto actual. Si hay dos objetos que utilicen el mismo cdigo, seleccionados a travs de otras instancias, cada uno tiene su propio valor nico de this. Un refinamiento habitual es que un constructor llame a otro para construir la instancia correctamente. El siguiente constructor llama al constructor parametrizado MiPunto(x,y) para terminar de iniciar la instancia: MiPunto() { // este es un constructor sin parmetros this( -1, -1 ); // Llama al constructor con parmetros que asigna a x y } La Referencia This En Java se permite declarar variables locales, incluyendo parmetros formales de mtodos, que se solapen con los nombres de las variables de instancia. No se utilizan x e y como nombres de parmetro para el mtodo inicia, porque ocultaran las variables de instancia x e y reales del mbito del mtodo. Si lo hubisemos hecho, entonces x se hubiera referido al parmetro formal, ocultando la variable de instancia x: void inicia2( int x, int y ) { x = x; // Ojo, no modificamos la variable de instancia!!! this.y = y; // Modificamos la variable de instancia!!! } DESTRUCTOR Un destructor es un mtodo que se invoca automticamente cuando el objeto se destruye. Un destructor es un mtodo que es ejecutado cada vez que se destruye (se elimina de RAM) un objeto, el objetivo de este mtodo es el de eliminar toda la memoria que ocup un objeto. En JAVA no es necesaria la definicin de destructores (es ms no existen), pues el mismo lenguaje se encarga de la eliminacin y liberacin de la memoria ocupada por un objeto, esto se realiza cada vez que un objeto pierde todas sus referencias. DESTRUCTOR Es un mtodo de clase que sirve para realizar ciertas operaciones necesarias al dejar de existir un objeto, por ejemplo, cerrar conexiones de una comunicacin, cerrar ficheros, etc. Para este fin se crea un mtodo, denominado finalize, con las siguientes caractersticas: protected void finalize() throws Throwable { cuerpo del destructor } TAREA Incluir un mtodo constructor uno sin parmetros y otro con parmetros, en las clases de las figuras utilizadas en la prctica anterior.