Métodos: Ejecución.

 Cuando se ejecuta una llamada de un método por un objeto o una clase, bien sea dinámico o estático, Java asocia a esa llamada una zona de memoria donde se guardarán las variables locales del método, tanto primitivas como complejas. Esa zona se llama registro de activación.

Cuando se ejecuta un método A y a través de éste se alcanza una instrucción en la que se llama a otro método B:

Se evalúan en A las expresiones que aparecen como argumentos del método B. Se reserva espacio de memoria para el registro de activación de B. Los parámetros formales de B se inician, en su registro de activación, a los valores de los argumentos mediante el paso de parámetros por valor. (Y esos valores dónde se encuentran?).

Si el método es dinámico o de objeto, LA VARIABLE FINAL THIS DEL NUEVO REGISTRO SE INICIA AL OBJETO EN CURSO Y YA NO CAMBIA.

Se ejecutan las instrucciones de B. Acabada la ejecución de B su registro de activación se libera.

Ejemplo: 

                    Punto p = new Punto(0.0, 0.0); //p es (0.0,0.0)

                    p.cambiar(3.0, 4.0);//p pasa a ser (3.0,4.0)

en la ejecución de estos dos métodos main y cambiar, sucede lo siguiente:

REGISTRO DE ACTIVACION                                                    REGISTRO DE ACTIVACION

Ejecución del método constructor:

Como con el resto de métodos, una vez evaluados los parámetros reales se crea un registro de activación y se pasa su valor a los parámetros formales.

Se obtiene un bloque de memoria libre en el montículo para albergar un objeto de la clase, que pasará a ser el objeto en curso con el que se inicia this.

Se inicializan las variables de instancia del objeto creado con el valor por defecto.

Si hay instrucciones en el cuerpo del constructor, se ejecutan (como por ejemplo, para cambiar los valores por defecto de los atributos de this).

Se devuelve el objeto (referencia a) this como resultado de la llamada al constructor. 

Ejecución de métodos. Pila de llamadas

• Java sólo ejecuta un método a la vez.
• El método en ejecución se denomina método activo.
• Cuando un método A invoca a un método B:
– la ejecución de A queda en suspenso,
– el estado de A se preserva en su registro de activación, que no se destruye hasta que se reanude y acabe su ejecución.
• En memoria pueden coexistir diversos registros:
– el registro del método activo o registro activo,
– un registro por cada método que permanezca en suspenso.

• Pila de llamadas (stack): Zona de memoria en donde Java dispone los registros (contiguos en memoria y ordenados por antigüedad).
• Cuando un método A invoca a un método B, el nuevo registro se dispone en la cima de la pila (1); al acabar, su registro se desapila (3).
• El método activo sólo puede acceder a las variables de su registro y los objetos que referencien (2).
• Las variables de clase están aparte, y todas son accesibles por el método activo (siempre
que sean públicas para el método).



Comentarios

Entradas populares de este blog

Definición de la estructura o atributos que tendrán los objetos de una clase.

Métodos: Declaración.

La clase String de java