因为没有系统的学过Java, 但现在很多项目都是JAVA语言,所以就以已经有的一点点C语言基础开始做java项目. 有一个内部类的问题想不明白,所以想请教一下.
下面有代码:
定义了2个类,一个是MainClass, 一个是SeviceClass. 还有一个接口. 在MainClass中实现这个接口定义了一个匿名类对象, 按照书上讲的, 这个匿名类对象会保存一个对MainClass对象的引用. 然后又将这个匿名类对象注册给ServiceClass对象, 假设这个ServiceClass对象一直在运行.
那么假设MainClass对象运行完毕了, 系统是不是不会去回收这个对象占用的内存空间? 因为有一个内部类对象一直引用着它?
那么如果将内部类对象的引用 mListener 置为 null 后, 系统会回收MainClass对象占用的内存空间吗
public class main
{
public static void main(String args[])
{
MainClass mInstance = new MainClass();
mInstance.RegisterListener();
//mInstance.UnRegisterListener();
}
}
interface IInterface
{
public void onStatusChanged(int newStatus);
}
class ServiceClass
{
IInterface mListener = null;
public void RegisterListener(IInterface ls)
{
mListener = ls;
}
private void notifyMainClass(int newStatus)
{
if (mListener != null)
{
try
{
mListener.onStatusChanged(newStatus);
}
catch(NullPointerException e)
{
mListener = null;
e.printStackTrace();
}
}
}
}
class MainClass
{
private int mNewStatus = -1;
ServiceClass mService = new ServiceClass();
private IInterface mListener = new IInterface()
{
public void onStatusChanged(int newStatus)
{
/* process newStatus */
System.out.println("" + newStatus);
mNewStatus = newStatus;
}
};
void RegisterListener()
{
mService.RegisterListener(mListener);
}
void UnRegisterListener()
{
mListener = null;
}
}
------解决方案--------------------
楼主 Java里不像C++有析构函数 对象的销毁内存的回收是JVM的工作 C/C++里我个人认为是程序员在管理内存 但是Java程序里内存是由JVM来管理的 有gc专门负责垃圾回收 但是我们无法得知gc会在什么时候销毁对象 回收内存
------解决方案--------------------
Java中有垃圾回收机制,就像楼上说的,有GC专门负责垃圾回收 但是我们无法得知GC会在什么时候销毁对象 回收内存 ,所以是不确定的