Sono uno studente in classe Java e ho imparato qualcosa su Java oggi che ha fatto girare i miei ingranaggi. Quando ho chiesto all'insegnante come e perché, non era sicuro del comportamento. Qualcuno può spiegare perché il seguente esempio funziona?Ambito Java: Restituzione di un oggetto istanziato all'interno di un metodo - È pericoloso?
class Example {
public int ex_val;
public Example (int a) {
this.ex_val = a;
}
public int getExVal() {
return this.ex_val;
}
}
Se dovessi creare un'istanza di "Esempio" all'interno di un metodo di un'altra classe e "ritorno" l'oggetto, si può fare il salto con successo fuori di esso è portata originale e possono essere usate in seguito.
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);
}
}
Questo funziona, ma questo comportamento è stabile? Posso contare su questo? Il garbage collector può saltare tra l'istruzione return di un metodo e l'istruzione di assegnazione della funzione chiamante? Sto correndo il rischio di fallimento in base alla versione del mio sistema operativo della JVM? Sembra una funzionalità a portata di mano se può essere invocata.
Non posso dire di aver capito cosa stai chiedendo qui. Cosa intendi per "saltare fuori dal suo ambito originale"? Sei un programmatore C++? –
Si sta confondendo l'ambito con le durate. Pensa allo scope come relativo alle variabili, lifetime agli oggetti. –