Jestem studentem w klasie Java i nauczyłem się czegoś o Javie dzisiaj, dzięki czemu moje narzędzia się zmieniają. Kiedy zapytałem nauczyciela, jak i dlaczego, nie był pewien co do tego zachowania. Czy ktoś może wyjaśnić, dlaczego poniższy przykład działa?Zakres Java: Zwrócenie obiektu utworzonego wewnątrz metody - Czy jest niebezpieczny?
class Example {
public int ex_val;
public Example (int a) {
this.ex_val = a;
}
public int getExVal() {
return this.ex_val;
}
}
Jeśli było stworzenie wystąpienie „Przykład” wewnątrz metody drugiej klasy i „powrót” obiekt może skutecznie dokonać skoku na swojej oryginalnej zakres i mogą być następnie wykorzystane.
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);
}
}
To działa, ale czy to zachowanie jest stabilne? Czy mogę na to liczyć? Czy menadżer śmieci może przeskakiwać pomiędzy instrukcją return jednej metody a instrukcją przypisania funkcji wywołującej? Czy mam ryzyko niepowodzenia na podstawie wersji JVM mojego systemu operacyjnego? Wydaje się to przydatną funkcjonalnością, jeśli można na niej polegać.
Nie mogę powiedzieć, że rozumiem o co prosisz. Co masz na myśli mówiąc "wyskocz z oryginalnego zakresu"? Czy jesteś programistą C++? –
Mylisz zakres z życiem. Pomyśl o zakresie dotyczącym zmiennych, czasu życia obiektów. –