在java中,我们如何从类中的方法中破坏类的实例

Sau*_*wal 8 java garbage-collection destructor

我接近它类似于删除任何常见对象的情况,即简单地使引用为null并让垃圾收集器完成其工作.

但是,对于在类中等于null,对该对象的唯一引用是"this".以下类的代码是有效的:

class A{
  public A(){
    //Init
  }

  public void method destruct(){
    if(someCondition){
      this=null;  //Is this statement valid? Why / Why not?
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

duf*_*ymo 18

您不要在Java中"破坏"对象.这是错误的.不要这样做.

在Java中在堆上创建对象.只要有指向他们的参考,他们就会活着.垃圾收集器清理混乱.

你当然应该尽你所能来确保你不会不必要地积累和保留引用(例如Swing中的Listeners).

但你的建议根本不是正确的.停止和停止.


Ste*_*n C 11

this=null;  //Is this statement valid? Why / Why not?
Run Code Online (Sandbox Code Playgroud)

它不是有效的Java,因为this它不是左值; 即不是你可以指定的东西.这是一个编译错误,就像42 = i;编译错误一样.

(JLS说明以下关于赋值: "赋值运算符的第一个操作数的结果必须是变量,否则会发生编译时错误." - JLS 15.26.1 然后JLS文本继续列出不同的东西有资格作为变量,而this不是其中之一.)

此外,正如duffymo所说,在Java中这是一个完全错误的事情.让GC完成它的工作.