Soy un estudiante en la clase de Java y aprendí algo sobre Java hoy que hizo que mis engranajes giren. Cuando le pregunté al profesor cómo y por qué, no estaba seguro del comportamiento. ¿Alguien puede explicar por qué funciona el siguiente ejemplo?Alcance de Java: devolver un objeto instanciado dentro de un método: ¿es peligroso?
class Example {
public int ex_val;
public Example (int a) {
this.ex_val = a;
}
public int getExVal() {
return this.ex_val;
}
}
Si tuviera que crear una instancia de "Ejemplo" dentro de un método de otra clase y "retorno" del objeto, con éxito puede hacer el salto fuera de él es alcance original y ser utilizado posteriormente.
class ParentObject {
// Instance Variables
public Example a;
public ParentObject (int number) {
// Initialize instance variable object from out-of-scope instantiation
this.a = genExample(number);
// Verify scope creep
System.out.println(this.a.getExVal());
}
public Example genExample (int a) {
return new Example(a);
}
}
Esto funciona, pero ¿es este comportamiento estable? ¿Puedo contar con esto? ¿Puede el recolector de basura saltar entre la declaración de devolución de un método y la instrucción de asignación de la función de llamada? ¿Estoy corriendo el riesgo de error en función de la versión de JVM de mi sistema operativo? Esto parece una funcionalidad práctica si se puede confiar en ella.
No puedo decir que entiendo lo que estás preguntando aquí. ¿A qué te refieres con "saltar de su alcance original"? ¿Eres un programador de C++? –
Estás confundiendo el alcance con los tiempos de vida. Piense en el alcance como perteneciente a variables, vida a objetos. –