なぜ、次のプログラムの出力がコースのfinalize()の前にクラスメイトのファイナライズを実行するのですか? ClassmateはCourseクラスオブジェクトを使用しているため、Finalize()はCourseのfinalize()の後に実行する必要がありますか?しかし、出力は逆を示しています。合成のファイナライズの出力が不確定です
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);
}
}
OUTPUT:
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
出力クラスのクラスメイトの代わりに使用されます –