Anda di halaman 1dari 11

CONSTRUCTORES EN JAVA

INTRODUCCION.-

A medida que progresa la revolucin computacional, la programacin "insegura"
se ha convertido en uno de los mayores culpables del encarecimiento de la
programacin.
Dos de estos aspectos de seguridad son la inicializacin y la limpieza. Muchos
de los fallos que se dan al programar ocurren cuando el programador olvida
inicializar una variable, objeto, etc. Esto es especialmente habitual en todos los
lenguajes de Programacin, cuando los usuarios no saben cmo inicializar un
componente, o incluso cundo deben hacerlo.

La eliminacin es un problema especial porque es fcil olvidarse de un elemento
una vez que ya no se utiliza, puesto que ya no tiene importancia.
Por consiguiente, los recursos que ese elemento utilizaba quedan reservados y es
fcil acabar quedndose sin recursos (y el ms importante, la memoria).

C++ introdujo el concepto de constructor, un mtodo especial invocado
automticamente en la creacin de un objeto. Java tambin adopt el constructor,
y adems proporciona un mtodo que cuando se especifica en el cdigo libera
automticamente recursos de memoria cuando dejan de ser utilizados, este
mtodo se llama garbage collector.
En java no es necesaria la definicin de destructores, 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.

Un punto clave de la Programacin Orientada a Objetos es el evitar informacin
incorrecta por no haber sido correctamente inicializadas las variables. J ava no
permite que haya variables miembro que no estn inicializadas ( Si puede haber
variables locales de mtodos sin inicializar, pero el compilador da un error si se
intentan utilizar sin asignarlas previamente un valor).



Pasos para la inicializacin
1.- Java inicializa siempre con valores por defecto las variables que son
miembros de la clases, mtodos, etc.
2.- El segundo paso para la inicializacin correcta de objetos es el uso de
constructores.
3.-Java todava dispone de una tercera lnea de actuacin para evitar que haya
variables sin inicializar correctamente. Son los inicializadores.

DEFINICIN DE CONSTRUCTOR.-

El constructor de una clase es un tipo especfico de mtodo (especial y estndar)
que se usa para inicializar los objetos de esa clase. Es una funcin que se ejecuta
automticamente siempre al crear un objeto.
Son mensajes que recibe la clase para crear e inicializar un objeto para que tenga
valores correctos. Un objeto SIEMPRE debe tener valores correctos, desde que se
crea hasta que se destruye. Al utilizar un constructor, el compilador determina cual
de los objetos va a responder al mensaje (virtual) que hemos creado.

La principal misin del Constructor es reservar memoria e inicializar la
variable miembro de la clase
En general, se los utiliza para inicializar los estados de las variables de
instancia

TIPOS

1. Constructor por defecto (no-args)
Si no se define ningn constructor de una clase, el compilador generar un
constructor por defecto. El constructor por defecto no tiene argumentos y
simplemente sita ceros en cada byte de las variables instancia de un objeto. Si se
definen constructores para una clase, el constructor por defecto no se genera.


2. Constructor de copia
El constructor de copia se utilizan para inicializar un objeto con otro objeto de la
misma clase.
Construye un nuevo objeto como una copia del que se le pasa
Cuenta(Cuenta otra){
codigo = otra.codigo;
saldo = otra.saldo;
titular = otra.titular;
}

No se usa mucho dentro de las bibliotecas de clases de Java.
Existe en la clase String y las colecciones.
La forma preferida de obtener la copia de un objeto es utilizar el mtodo clone.

3. Constructor comn(personalizado)

El constructor comn es aquel que recibe parmetros para asignarles como
valores inciales a los datos miembros, o sea que al crear la instancia, se pas
unos parmetros para inicializar .Si se declara algn constructor, entonces ya no
se puede usar el constructor personalizado. Es necesario usar el constructor
declarado en la clase.

De entre todos los constructores que existan, tan slo uno se ejecutar al
crear un objeto de la clase.


DECLARACIN DE UN CONSTRUCTOR (SINTAXIS)

<modificador acceso> nombreClase ([lista de parmetros]) {
[declaraciones de variables locales]
sentencias
}


Donde

<[modificadores de acceso> Son los que permiten al programador quien accede a los
datos y mtodos miembro de una clase pueden ser: public, protected, private.

nombreClase.- Representa el mismo nombre de la clase.

Dentro del cdigo de un constructor generalmente suele existir inicializaciones de
variables y objetos, para conseguir que el objeto sea creado con dichos valores
iniciales.

[lista de parmetros] es una lista de declaraciones de parmetros separadas por
comas (,).

Cada una de las declaraciones de parmetros tiene la siguiente sintaxis:

tipo nomParametro
Donde tipo es el tipo del parmetro y puede ser uno de los tipos predefinidos
(char, byte, short, int, long, float o double) o una clase.

nomParametro es el nombre del parmetro.
Cada una de las declaraciones de variables locales tiene la siguiente sintaxis:

[declaracion de variables locales]

tipo nomVariable Donde tipo es el tipo de la variable local y puede ser uno de los
tipos predefinidos (char, byte, short, int, long, float o double) o una clase.
nomVariable es el nombre de la variable local.

Las sentencias pueden ser sentencias de expresin o simple, compuestas o
bloques y de control.

Ejemplo:
public class Clase {
private int enteroPrivado;
public Clase() { // constructor por defecto
enteroPrivado = 0;
}
public Clase(int entero) { // constructor personalizado
enteroPrivado = entero;
}
}


LLAMADA AL CONSTRUCTOR

nombreClase objeto = new nombreClase(<lista parametros >);

El constructor se invoca automticamente cuando new crea un objeto de
esa clase.
objeto es una variable de referencia.
La instancia (new) reserva el lugar de almacenamiento e invoca al constructor.

En Java, cuando se instancia un objeto, siempre se hace una llamada directa al
constructor como argumento del operador new. Este operador se encarga de que
el sistema proporcione memoria para contener al objeto que se va a crear
Antes de ser instanciada con new no se consume memoria, simplemente es una
declaracin de tipo.

Variable de Referencia.. una variable de referencia es usada para acceder al
lugar en memoria donde se almacena un objeto. Array, Collection y String, son
variables de referencia.
Ejemplo:
Clase elObjeto;
elObjeto = new Clase(); // llamada al constructor por medio de la variable de referencia elObjeto
O en una sola lnea:
Clase elObjeto = new Clase();
Clase elObjeto = new Clase(5);

CARACTERSTICAS PRINCIPALES DE UN CONSTRUCTOR

En Java, los objetos son construidos. Cada vez que creamos un nuevo objeto, al
menos un constructor es invocado.
Se garantiza la inicializacin de cada objeto (sus atributos) con un constructor
Java invoca al constructor al crear el objeto.
Los Constructores no tienen valor de retorno (ni siquiera void). Esto se
debe a que el tipo especfico que debe devolver un constructor de clase es
el propio tipo de la clase.
Su nombre es el mismo que el de la clase. Su argumento implcito es el
objeto que se est creando.
Se puede definir cero, uno o ms constructores para una clase.
Si no se define un constructor, el compilador crea uno por ausencia, el
cual no tiene parmetros llamado constructor por defecto.
Pueden usarse cualquier modificador de acceso.
Al igual que los dems mtodos de una clase, los constructores pueden
tener tambin los modificadores de acceso public, prvate, protected. Si un
constructor es prvate, ninguna otra clase puede crear un objeto de esa
clase. En este caso, puede haber mtodos public y static (factory methods)
que llamen al constructor y devuelvan un objeto de esa clase.
Se llama Constructor por defecto al constructor que no tiene argumentos.
El programador debe proporcionar en el cdigo valores iniciales adecuados
para todas las variables miembro.
Una clase tiene varios constructores, que se diferencia por el tipo y el
nmero de sus argumentos (son un ejemplo tpico de mtodos
sobrecargados)
Si ya tenemos un constructor con argumentos, no se generar uno sin
argumentos automticamente.
Cada constructor tiene, como primera sentencia, una llamada a un
constructor sobrecargado (this) o a un constructor de la superclase (super),
aunque esta lnea puede ser agregada automticamente por el compilador.
Un constructor de una clase puede llamar a otro constructor previamente
definido en la misma clase por medio de la palabra this. En este contexto,
la palabra this slo puede aparecer en la primera sentencia de un
constructor.
El constructor de una sub-clase puede llamar al constructor de su sper-
clase por medio de la palabra super, seguida de los argumentos
apropiados entre parntesis. De esta forma, un constructor slo tiene que
inicializar por si mismo las variables no heredadas.

REFERENCIA THIS

Si un parmetro tiene el mismo identificador (nombre) que una variable de
instancia se usa la palabra clave this para identificar cual es la variable de
instancia:
Los mtodos de instancia reciben el argumento this implcitamente se refiere al
mismo objeto.
Referencia al objeto actual.
Permite invocar mtodos del objeto actual.
Permite referenciar atributos del objeto actual
Permite devolver una referencia al objeto actual
Permite invocaciones entre constructores
Al acceder a variables de instancia de una clase, la palabra clave this
hace referencia a los miembros de la propia clase

public class Pelicula {
private String titulo;
public void setTitulo(String titulo) {
this.titulo = titulo;

}
}

Se puede compartir cdigo entre constructores usando la referencia this. Un
constructor invoca a otro pasndole los argumentos que requiere.

public class Pelicula {

private String titulo;
private String tipo;

public Pelicula()
{
this("Pelicula sin definir");
}
public Pelicula (String titulo) {
this.titulo = titulo;
}

public String getTitulo() {
return titulo;
}
}

TestThis.java
public class TestThis {

public static void main (String[] args) {
Pelicula pelicula1 = new Pelicula();
Pelicula pelicula2 = new Pelicula("Todo sobre mi madre");
System.out.println(pelicula1.getTitulo());
System.out.println(pelicula2.getTitulo());
}
}


REFERENCIA SUPER

Hace referencia a la Herencia de clases. La nueva clase hereda de la primera
todos los mtodos y los atributos, con la posibilidad de definir unos atributos y
unos mtodos nuevos o de volver a definir otros.
Se usa para invocar constructores de la clase padre
Debe ser la primera sentencia del constructor de la clase hijo
Esta referencia tambin se usa para invocar cualquier mtodo del padre.
Si la superclase no tiene un constructor sin argumentos, se debers definir
un constructor en la subclase dado que necesitars un lugar desde donde
llamar a super con los argumentos necesarios. Ejemplo


class Animal {
Animal(String name) { }
}
class Horse extends Animal {
Horse() {
super(); // error
}
}



super() llama al constructor de la clase de la que se hereda (extends). Recuerda
que todas las clases heredan en ltima instancia a la clase Object.


public class Item {
protected float precio = 0;
Item (float precio) {
this.precio = precio;
}
}


public class Pelicula extends Item {
private String titulo = "";
Pelicula (float precio, String titulo) {
super(precio);
this.titulo = titulo;
}
}

Una subclase no hereda ningn constructor de la superclase, debe declararse
explcitamente.
Solo en caso no se declare explcitamente, se ejecutaran los constructores por
defecto de las superclases y finalmente de la subclase.


Pelicula pelicula = new Pelicula ();
// Inicia variables de la clase Item. Constructor por defecto.
// Inicia variables de la clase Pelicula. Constructor por defecto.








GARBAGE COLLECTOR

Se refiere a la limpieza de instancias (Objetos) las cuales han dejado de ser
utilizadas en un programa Java. Este proceso llevado a cabo directamente por el
JVM ("Java Virtual Machine") permite liberar recursos, en su mayora de memoria
("RAM") para ser reutilizados por el sistema, sin embargo, este proceso trae
consigo dos preguntas :
Java podra ser el lenguaje ms utilizados que depende de la recoleccin
de basura .
Los beneficios de Garbage Collector son indiscutibles.
El concepto de Garbage Collector fue inventado por John McCarthy en
1959.
El programador no tiene que invocar a una subrutina para liberar memoria.

Que instancias/objetos son elegidos y liberados por el proceso de "Garbage
Collection" ?.
Toda instancia/referencia que sea asignada un valor de null es elegible para
"Garbage Collection", si la instancia/referencia no tiene un valor de null sta no es
elegible para "Garbage Collection".
Aunque la instancia/referencia sea asignada con un valor de null sta no ser
liberada ("Garbage Collected") inmediatamente, sino hasta que el proceso de
"Garbage Collection" sea iniciado.

Quien invoca el proceso de "Garbage Collection" ? : El JVM ("Java Virtual
Machine") se hace cargo de iniciar el proceso de "Garbage Collection" nicamente
cuando ste (segn sus algoritmos internos) determine que su memoria esta en
proceso de agotamiento, es hasta entonces que es liberada la memoria de las
instancias/referencias que se han declarado como elegibles para "Garbage
Collection".

Cuando se invoca el recolector de basura, recorre la lista de espacios reservados
observando el contador de referencias de cada espacio. Si un contador ha llegado
a cero significa que ese espacio de memoria ya no se usa y, por tanto, puede ser
liberado.



BIBLIOGRAFIA
COMO PROGRAMAR JAVA, Deitel-Deitel, Quinta Edicin
APRENDA JAVA COMO SI ESTUBIERA EN PRIMERO, Tencnum

http://slideshared.net
http://javabasico.osmosislatina.com/curso/progbasico2/constructores.htm
http://es.wikipedia.org/wiki/Constructor_%28inform%C3%A1tica%29
http://www.mailxmail.com/curso-java/definicion-constructores-clase-1
http://www.mitecnologico.com/Main/ElConstructor
http://toolboxnet.blogspot.com/2010/03/la-referencia-super-en-java-050103.html
http://javabasico.osmosislatina.com/curso/threadsgc.htm
http://javabasico.osmosislatina.com/curso/progbasico2/constructores.htm
http://www.arrakis.es/~abelp/ApuntesJava/ClasesII.htm

Anda mungkin juga menyukai