Inicialización de Objetos en Java
¿Que resultados da el siguiente código?
--------------------------------------------------------------------------------
Code: |
public class Padre3 |
Resultado
tras ejecutar Padre3.class:
P1: 2 P2:
4
--------------------------------------------------------------------------------
Code: |
public class Padre2 |
Resultado
tras ejecutar Padre2.class:
Ni
siquiera compila
--------------------------------------------------------------------------------
Code: |
public class Padre1 |
Resultado
tras ejecutar Padre1.class:
P1: 0 P2:
3
--------------------------------------------------------------------------------
Code: |
public class Padre |
Resultado
tras ejecutar Hijo.class:
P1: 0 P2:
3
H1: 7 H2:
11
--------------------------------------------------------------------------------
¿Sorprendido/a?
- Java inicializa automaticamente la memoria reservada (heap) a valores por defecto (false, 0, 0.0, \u000, null)
- La inicialización se puede hacer de tres formas
- Inicializador tipo
Code: |
public clase |
- Inicializador tipo
Code: |
public clase |
- Constructor
- Para cada constructor javac crea un método <init> en el .class que se encargará de ejecutar el código del constructor y alguna otra cosilla
- Normas inicializadores
- Se ejecutan en el orden en el que estén escritos en el código fuente
- Un inicializador no puede referenciar otro declarado posteriormente
- Proceso de inicialización (herencia de tres niveles:abuelo, padre e hijo)
1. Se reserva espacio para los atributos del hijo (incluidos los heredados de padre y abuelo)
2. Se inicializan estos atributos a los valores por defecto (null,0, false...)
3. Se invoca el metodo <init> correspondiente del hijo
1. Se ejecuta el <init> del padre
1. Se ejecuta el <init> del abuelo
1. Se ejecuta el codigo de los inicializadores del abuelo (atributos de padre e hijo siguen inicializados a valores por defecto)
2. Se ejecuta el codigo del constructor del abuelo
2. Se ejecuta el código de los inicializadores del padre (atributos del hijo siguen inicializados a valores por defecto)
3. Se ejecuta el codigo del constructor del padre
2. Se ejecuta el código de los inicializadores de hijo
3. Se ejecuta el codigo del constructor del hijo