如题。
我写了下面的代码,但是finalzie并没有被调用
//GabageDriver.java
class Gabage{
public void finalize(){
System.out.println("Gabage finalize invoked\n");
}
}public class GabageDriver{
public void finalize(){
System.out.println("GabageDriver finalize invoked\n");
}
public static void main(String[] args){
{
GabageDriver d = new GabageDriver();
Gabage g = new Gabage();
}
System.gc();
}
}
我写了下面的代码,但是finalzie并没有被调用
//GabageDriver.java
class Gabage{
public void finalize(){
System.out.println("Gabage finalize invoked\n");
}
}public class GabageDriver{
public void finalize(){
System.out.println("GabageDriver finalize invoked\n");
}
public static void main(String[] args){
{
GabageDriver d = new GabageDriver();
Gabage g = new Gabage();
}
System.gc();
}
}
{
GabageDriver d = new GabageDriver();
Gabage g = new Gabage();
g = null; // add this
}
System.gc();
}
public void finalize(){
System.out.println("GabageDriver finalize invoked\n");
}
public static void main(String[] args){
fun();
System.gc();
}
public static void fun(){
GabageDriver d = new GabageDriver();
Gabage g = new Gabage();
}
}java中,函数内的大括号没有限制变量作用域的功能
public class Test{
public static void main(String args[]){
{
int i=0;
}
System.out.println(i);
}
}
这说明大括号明显有限制变量作用域的功能呀,关键问题是,一个NEW出来的对象什么情况下可以说它成了垃圾?
public void finalize(){
System.out.println("Gabage finalize invoked\n");
}
}public class GabageDriver{
public void finalize(){
System.out.println("GabageDriver finalize invoked\n");
}
public static void main(String[] args){
{
new GabageDriver();
new Gabage();
System.gc();
}
}
当创建对象 而没有对象引用的时候 这个对象就会变成垃圾
只有调用System.gc()时候 finalize()才会自动调用 而且你需要重写这个方法
或者当内存不够时 它才会自动执行