Я учусь в классе Java и сегодня узнал кое-что о Java, что заставило меня повернуться. Когда я спросил учителя, как и почему, он не был уверен в поведении. Может ли кто-нибудь объяснить, почему работает следующий пример?
class Example {
public int ex_val;
public Example (int a) {
this.ex_val = a;
}
public int getExVal () {
return this.ex_val;
}
}
Если бы мне пришлось создать экземпляр «Example» внутри метода другого класса и «вернуть» объект, он мог бы успешно выпрыгнуть из своей исходной области видимости и использоваться впоследствии.
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);
}
}
Это ДЕЙСТВИТЕЛЬНО работает, но стабильно ли такое поведение? Могу я на это рассчитывать? Может ли сборщик мусора переключаться между оператором возврата одного метода и оператором присваивания вызывающей функции? Подвержен ли я риску сбоя из-за версии JVM в моей ОС? Эта функция кажется удобной, если на нее можно положиться.