다음 프로그램의 출력 결과가 Course of finalize() 전에 Classmate를 실행하는 이유는 무엇입니까? Classmate는 Course 클래스 객체를 사용하므로 Finalize()는 Course의 finalize() 후에 실행해야합니까? 하지만 출력에 반대가 나타납니다 .WHY?합성 결과가 불확실한 상태로 출력됩니다.
class Classmate{
Course mca;
Classmate(){
System.out.println("Student const. `enter code here`called");
mca = new Course();
mca.getCourse();
}
@Override
protected void finalize() {System.out.println("good bye Student");
}
}
class Course{
Course(){
System.out.println("Course const. called");
}
void getCourse(){
System.out.println("your ccourse is MCA");
}
@Override
protected void finalize() throws Throwable {
// TODO Auto-generated method stub
System.out.println("goodbye course");
}
}
public class Composition {
public static void main(String[] args) {
Classmate ram = new Classmate();
ram=null;
System.gc();
for(int i=0;i<5;i++)
System.out.println("i is "+i);
}
}
출력 :
Student const. called
Course const. called
your ccourse is MCA
good bye Student
i is 0
goodbye course
i is 1
i is 2
i is 3
i is 4
출력 학생은 Classmate 대신 사용됩니다. –