我是Java課程的學生,今天學習了一些關於Java的知識,這使我的齒輪變成了現實。當我問老師如何和爲什麼時,他不確定這種行爲。任何人都可以解釋爲什麼下面的例子工作?Java範圍:返回在方法內實例化的對象 - 是否危險?
class Example {
public int ex_val;
public Example (int a) {
this.ex_val = a;
}
public int getExVal() {
return this.ex_val;
}
}
如果我是另一個類和「返回」的對象的方法內創建「實例」的實例,它可以成功地使跳出它的原始範圍和隨後使用。
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,我是否有失敗的風險?如果可以信賴的話,這看起來像是方便的功能。
不能說我明白你在問什麼。 「跳出原來的範圍」是什麼意思?你是C++程序員嗎? – 2012-02-01 22:46:19
你把範圍和生命時間混淆了。將範圍看作與變量相關的變量,對象的生命週期。 – 2012-02-01 22:47:32