Java Scope:返回在方法中实例化的对象 - 这是危险的吗?

Zak*_*Zak 7 java

我是Java课程的学生,今天学习了一些关于Java的东西,这使得我的设备转向了.当我问老师如何以及为什么时,他不确定这种行为.谁能解释为什么以下示例有效?

class Example {
    public int ex_val;

    public Example (int a) {
        this.ex_val = a;
    }

    public int getExVal () {
        return this.ex_val;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我要在另一个类的方法中创建一个"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);
    }
}
Run Code Online (Sandbox Code Playgroud)

这可行,但这种行为是否稳定?我可以指望这个吗?垃圾收集器可以在一个方法的return语句和调用函数的赋值语句之间跳转吗?我是否根据操作系统的JVM版本运行失败风险?如果可以依赖它,这似乎是方便的功能.

Lou*_*man 10

这是在Java中完全正常,常见且可靠的事情,要做的是确保垃圾收集器在没有任何实时引用时立即清理对象.这不依赖于操作系统或依赖于JVM:任何JVM都可以使用它.