-2
class FDemo {
int x;
FDemo(int i) {
x = i;
}
protected void finalize() {
System.out.println("Finalizing " + x);
}
void generator(int i) {
FDemo o = new FDemo(i);
System.out.println("Creat obj No: " + x); // this line
}
}
class Finalize {
public static void main(String args[]) {
int count;
FDemo ob = new FDemo(0);
for(count=1; count < 100000; count++)
ob.generator(count);
}
}
}
x의 값은 항상 0 (객체 ob의 x 값)을 표시하며, 객체 o의 값을 표시하지 않는 이유는 무엇입니까 ?? 나는 내가 o.x를 사용한다면 객체 o에서 x의 값을 얻는다. 하지만 여전히이 코드에서 오브젝트 o가 아닌 비열한 ob의 가치를 보여주는 이유는 무엇입니까 ??자바에서 객체 생성 및 파이널 지정
Erm, 새로운'FDemo'를 인스턴스화 한 다음 아무 것도하지 않고 버립니다. 정확하게 당신은 무슨 일이 일어나기를 기대합니까? –
'x'를'o'로 보라고 말하지 않았습니다. 'System.out.println ("Create obj No :"+ ox);를 사용하면 원하는 것을 얻을 수 있지만'x'는 현재 객체의'x'를 가리키며'x'는 참조하지 않습니다. 방금 만든 객체입니다. –
'int x'를 'static int x'로 변경하면 효과가 있지만 접근 방식이 잘못되었습니다. 새 인스턴스를 만드는 중 객체 생성 설정 메서드에서 값을 변경하는 경우 – franki3xe