Yo estaba pasando por el concepto de hoisting
en JavaScript, donde todas las funciones y las declaraciones de variables se izan antes de cualquier ejecución se lleva a cabo y esta es la razón por la que una función está disponible antes de su parte real de la declaración.
Me hizo pensar exactamente cómo trabajó en Java.
Considere el siguiente código:
package declarationOrder;
public class Main {
int num = init();
int init() {
return 5;
}
}
¿Cómo es exactamente el método init()
disponible para una llamada antes de su parte de declaración se alcanza?
Considere otro ejemplo:
package declarationOrder;
public class Main {
int num1 = num2; // compiler error
int num2 = 5;
}
¿Cómo es que el orden de declaración de las variables juega un papel aquí?
¿Por qué y cómo es el método tratado de manera diferente?
El compilador seguir un orden para cargar contenido (atributos, métodos, bloques estáticos, ..) en la clase en Java:
En su caso, el método es el primero que se cargan, a continuación, los atributos de clase.
acerca de los atributos que se cargará en el orden de inicialización, se produce un error en el segundo ejemplo, ya num2
se ha mencionado antes num1
si invertir el fin de que funcione bien:
int num2 = 5;
int num1 = num2;
Para más detalles, ver 12.4.2. Procedimiento detallado de inicialización