finalize是不一定被调用的。

解决方案 »

  1.   

    java 自动回收,是一个亮点。 
    .net不是也学着这样做了吗?
      

  2.   

    要是想释放jvm回收不了的资源呢?
      

  3.   

    c#还是有析构函数的,而c++.net有析构函数是肯定的了
      

  4.   

    看来,java的构架,绝对了,在语法层次上,java不可能实现析构函数了。
      

  5.   

    jvm自动gc啊,不过有些特别的如socket,io,数据库连接啊,都是要自己手工关闭的!!
      

  6.   

    存在就有它的理由,当初他们设计JAVA的时候也应该想到了这一点
      

  7.   

    是想到了,给个理由不加上这个功能吧。比如,我有30个类都需要在进程退出的时候清理资源,那么我就需要在main方法里加30个close?a.close
    b.close
    c.close
    d.close呵呵,如果我的类重新整理了,那么我就需要该mina函数。所以,java从语法上可以说是完全面向对象,但是从语义上来说,不能算作完全面向对象。
      

  8.   

    对于普通的java对象,它会自动回收的,java虚拟机中有一个自动回收线程,不定时的回收用户不再使用的对象,而他回收的只是对象本身所占的内存空间。
    所以,在使用普通对象时,用户不用处理,由java来自动回收。
    还有一些比较特殊的对象,比如连接数据库的对象,Connection,或者是文件操作对象 File,等等一些访问了其它资源的对象,这些对象不仅仅在内存中占有资源,同进也占有了机器中其它的资源,而此时如果只使用java自动回去的机制是不够的,因为他不知道什么时候回收,而这些对象当使用完,为了节约资源要马上释放的。此时呢,就要用户自己动手了,比如:Conncetion中的close方法,就是手动来释放占用的其它资源的。
    这也是java再处理不同类型对象给用户提供的一些机制。
      

  9.   

    这一点做的实在是比较白痴的,没有C#做的好。但是都差不多的,没有太本质的区别。
    Java里没有析构,C#有析构,但是这个析构不能完全等同于C++的析构函数的。
    因为我们都不能控制这个析构的调用时间的。Java的垃圾回收算法也不必C#,所以Java遇到大内存使用的时候,就是比较头疼。
    非得-Xxxx;C#提供了using关键字来控制对象的资源生存期。
    相对好点。
    此外C#提供了struct,来解决过多堆对象的问题。
      

  10.   

    > 此外C#提供了struct,来解决过多堆对象的问题。这个好  :)Java 没有栈对象,挺可惜的,不知道是出于什么考虑……