java 大家帮我看下这句话是啥意思谢谢勒

来源:百度知道 编辑:UC知道 时间:2024/05/23 20:25:10
class Book{
boolean checkedOut=false;
Book(boolean checkOut){
checkedOut=checkOut;
}
void checkIn(){
checkedOut=false;
}
public void finalize(){
if (checkedOut)
System.out.println(
"Error:checkde out");
}
}
public class TerminationCondition {
public static void main(String[] args){
Book novel = new Book (true);
novel.checkIn();
new Book(true);《--------这句改成 Book n=new Book(true);结果就不一样勒。
System.gc();
}
}
偶是菜鸟大虾们帮个忙哈~~

因为那是Book n=new Book(true);和new Book(true);之间的区别,前者不光声明了类对象,还对类对象进行开辟了内存空间,后者就没有开辟内存空间,所以没有加载到内存里去.最后的System.gc(); 进行内存清理的时候没有清理,而
Book n=new Book(true);就会被内存清理掉.所以会出现不同情况:建议你修改代码看效果:1, static boolean checkedOut=false;
2.new Book(true);
System.out.println(Book.checkedOut);效果如下:

true//这是 new Book(true);的结果
Error:checkde out //这是 Book n=new Book(true);的结果

知道是怎么回事了不呀.

楼上的finalize()和Ststem.gc();的用法类似的...

因为改成 Book n=new Book(true);垃圾回收器就不会调用finalize()方法。因为有对该对象的引用。而没改的时候垃圾回收器会认为那段内存已经没用了所以会调用finalize()方法。