public class TestProject{
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Book b1 = new Book();
new Book();
System.gc();
}
}class Book {
@Override
protected void finalize() {
System.out.println("Error : checked out ");
}
}
当我只写 Book b1 = new Book();的时候没有调用到finalize()方法,但是当我直接写new Book()时,不给定义对象的时候就会调用finalize()方法,求解
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Book b1 = new Book();
new Book();
System.gc();
}
}class Book {
@Override
protected void finalize() {
System.out.println("Error : checked out ");
}
}
当我只写 Book b1 = new Book();的时候没有调用到finalize()方法,但是当我直接写new Book()时,不给定义对象的时候就会调用finalize()方法,求解
解决方案 »
- 关键字 native
- 在applet中在一个矩形中画圆?(我是新手)
- 重写jtree TreeCellRenderer的疑问
- 为什么import java.awt.*之后还要import java.awt.event.*?
- 线程队列:该程序有些问题,出在哪,怎么解决?
- 请大家帮忙看看,这个参数是怎么传递的~
- 下载电子书 好地方。。。。。
- 我在JBuilder中将java代码编译成本地代码后,是否就可以脱离java环境(在不装JRE的
- java语言有没有对+,==,,的运算副重载机制
- jbuilder5光标错位
- java如何获取系统当前窗口的句柄并向其发送消息
- 请问for循环里的值能赋到循环外吗?
你这种写法,b1的生命周期结束,要到 main()函数执行完毕了。修改下:
public static void main(String[] args) {
Book b1 = new Book();
b1 = null; // 释放引用。
System.gc();
}
public static void main(String[] args) {
for (int i = 0; i < 9999999; i++) Book b1 = new Book();
}
这种情况下,其实 Book b1 每次循环都会重建,那么可以在后台看到大量的:
Error : checked out