Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Contructores en java(grupo 8)
1. CONSTRUCTORES EN JAVA
INTRODUCCION.-
A medida que progresa la revolución computacional, la programación "insegura"
se ha convertido en uno de los mayores culpables del encarecimiento de la
programación.
Dos de estos aspectos de seguridad son la inicialización 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 Programación, cuando los usuarios no saben cómo inicializar un
componente, o incluso cuándo deben hacerlo.
La eliminación es un problema especial porque es fácil 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
fácil acabar quedándose sin recursos (y el más importante, la memoria).
C++ introdujo el concepto de constructor, un método especial invocado
automáticamente en la creación de un objeto. Java también adoptó el constructor,
y además proporciona un método que cuando se especifica en el código libera
automáticamente recursos de memoria cuando dejan de ser utilizados, este
método se llama garbage collector.
En java no es necesaria la definición de destructores, pues el mismo lenguaje se
encarga de la eliminación y liberación de la memoria ocupada por un objeto, esto
se realiza cada vez que un objeto pierde todas sus referencias.
Un punto clave de la Programación Orientada a Objetos es el evitar información
incorrecta por no haber sido correctamente inicializadas las variables. Java no
permite que haya variables miembro que no estén inicializadas ( Si puede haber
variables locales de métodos sin inicializar, pero el compilador da un error si se
intentan utilizar sin asignarlas previamente un valor).
2. Pasos para la inicialización
1.- Java inicializa siempre con valores por defecto las variables que son
miembros de la clases, métodos, etc.
2.- El segundo paso para la inicialización correcta de objetos es el uso de
constructores.
3.-Java todavía dispone de una tercera línea de actuación para evitar que haya
variables sin inicializar correctamente. Son los inicializadores.
DEFINICIÓN DE CONSTRUCTOR.-
El constructor de una clase es un tipo específico de método (especial y estándar)
que se usa para inicializar los objetos de esa clase. Es una función que se ejecuta
automáticamente 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 misión 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 ningún constructor de una clase, el compilador generará un
constructor por defecto. El constructor por defecto no tiene argumentos y
simplemente sitúa 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.
3. 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 método clone.
3. Constructor común(personalizado)
El constructor común es aquel que recibe parámetros para asignarles como
valores iníciales a los datos miembros, o sea que al crear la instancia, se pasó
unos parámetros para inicializar .Si se declara algún 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 sólo uno se ejecutará al
crear un objeto de la clase.
DECLARACIÓN DE UN CONSTRUCTOR (SINTAXIS)
<modificador acceso> nombreClase ([lista de parámetros]) {
[declaraciones de variables locales]
sentencias
}
4. Donde
<[modificadores de acceso> Son los que permiten al programador quien accede a los
datos y métodos miembro de una clase pueden ser: public, protected, private.
nombreClase.- Representa el mismo nombre de la clase.
Dentro del código de un constructor generalmente suele existir inicializaciones de
variables y objetos, para conseguir que el objeto sea creado con dichos valores
iniciales.
[lista de parámetros] es una lista de declaraciones de parámetros separadas por
comas (,).
Cada una de las declaraciones de parámetros tiene la siguiente sintaxis:
tipo nomParametro
Donde tipo es el tipo del parámetro y puede ser uno de los tipos predefinidos
(char, byte, short, int, long, float o double) o una clase.
nomParametro es el nombre del parámetro.
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 expresión o simple, compuestas o
bloques y de control.
Ejemplo:
public class Clase {
private int enteroPrivado;
public Clase() { // constructor por defecto
enteroPrivado = 0;
}
5. public Clase(int entero) { // constructor personalizado
enteroPrivado = entero;
}
}
LLAMADA AL CONSTRUCTOR
nombreClase objeto = new nombreClase(<lista parametros >);
El constructor se invoca automáticamente 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
declaración 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 línea:
Clase elObjeto = new Clase();
Clase elObjeto = new Clase(5);
6. CARACTERÍSTICAS 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 inicialización 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 específico 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 implícito es el
objeto que se está creando.
Se puede definir cero, uno o más constructores para una clase.
Si no se define un constructor, el compilador crea uno por ausencia, el
cual no tiene parámetros llamado constructor por defecto.
Pueden usarse cualquier modificador de acceso.
Al igual que los demás métodos de una clase, los constructores pueden
tener también los modificadores de acceso public, prívate, protected. Si un
constructor es prívate, ninguna otra clase puede crear un objeto de esa
clase. En este caso, puede haber métodos 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 código valores iniciales adecuados
para todas las variables miembro.
Una clase tiene varios constructores, que se diferencia por el tipo y el
número de sus argumentos (son un ejemplo típico de métodos
sobrecargados)
Si ya tenemos un constructor con argumentos, no se generará uno sin
argumentos automáticamente.
Cada constructor tiene, como primera sentencia, una llamada a un
constructor sobrecargado (this) o a un constructor de la superclase (super),
aunque esta línea puede ser agregada automáticamente 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 sólo puede aparecer en la primera sentencia de un
constructor.
El constructor de una sub-clase puede llamar al constructor de su súper-
clase por medio de la palabra super, seguida de los argumentos
apropiados entre paréntesis. De esta forma, un constructor sólo tiene que
inicializar por si mismo las variables no heredadas.
7. REFERENCIA THIS
Si un parámetro 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 métodos de instancia reciben el argumento this implícitamente se refiere al
mismo objeto.
• Referencia al objeto actual.
• Permite invocar métodos 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 código entre constructores usando la referencia this. Un
constructor invoca a otro pasándole 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;
}
8. 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 métodos y los atributos, con la posibilidad de definir unos atributos y
unos métodos 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 también se usa para invocar cualquier método del padre.
Si la superclase no tiene un constructor sin argumentos, se deberás definir
un constructor en la subclase dado que necesitarás un lugar desde donde
llamar a super con los argumentos necesarios. Ejemplo
class Animal {
Animal(String name) { }
}
class Horse extends Animal {
Horse() {
super(); // error
}
}
9. 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 ningún constructor de la superclase, debe declararse
explícitamente.
Solo en caso no se declare explícitamente, 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.
10. 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 mayoría de memoria
("RAM") para ser reutilizados por el sistema, sin embargo, este proceso trae
consigo dos preguntas :
• Java podría ser el lenguaje más utilizados que depende de la recolección
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 (según 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.
11. BIBLIOGRAFIA
COMO PROGRAMAR JAVA, Deitel-Deitel, Quinta Edición
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