有个人在翻译外文资料的时候问我问题,说是什么Java的析构函数不会肯定被执行,我也是外行,问问

解决方案 »

  1.   

    java 里面貌似没有析构函数的概念的把?
    应该来及回收器机制,垃圾回收机制是我们所无法控制的,只能通过虚拟机本身控制的,
    程序员只能通过System.gc()方法通知虚拟机加快垃圾回收,但不保证马上回收!
      

  2.   

    析构函数?Java有吗?finalize倒是有。
      

  3.   

    Java没有析构函数
    我估计LZ在看TIJ吧
    那书不看也可以
      

  4.   

    呵呵,我不知道什么书,反正有个人在网上求助说他翻译不来,
    好久以前了,我重新回去看了看
    那段时候正好是Java学好开始学C的时候 
    我看了看是说:Java的析构函数不像C那样执行,而是结束后执行的时间和顺序也不同
    是根据资源回收器的工作来回收资源和执行析构函数。那个问的人很傻的,还自以为是程序员很牛的,
    原来Java没析构函数(我 Java用Pascal的思想做的,不搞对象,痛苦啊,总是搞不好)2楼解答了我的问题,不过也感谢其他人
      

  5.   

    那个人在外国留学吧,碰到翻不来看不懂的教材
    大家说我这样翻译有没有误人子弟啊:原文就不贴了哈,反正你们都知道Java如何运行,那书应该没什么问题,就是我的翻译不知是否合理,总之自己看了好像也不通顺啊。:实际上,在析构函数被call(调用)的时候,它不是能够保证被调用的。并不是对象(Object)寿命终止之后调用,而是在系统将它(Object)从垃圾地址收集器把这个对象所预定的内存还给系统的时候自动执行的。在某些情况下,它不但会在这之后过很长的时间执行,括号内的内容:(无用内存回收器是异步的后台运行程序)甚至还会根本不执行。即使在程序结束的时候,只要在无用内存回收器没有被调用,就不会用到析构函数。
    即使调用析构函数,它们的顺序和时间也不会被确定,所以使用Java的时候应谨慎使用析构函数。
      

  6.   

    竟然把finlalize方法翻译成析构函数,这个……
      

  7.   

    恩,不是必须执行的。
    好像需要设置一个东西才能执行。即便这样,在程序关闭的时候,内存中没有被gc回收的对象也不能做析构。所以不要指望析构的时候做资源回收。lz可以自己找资料,详细查一下。记忆中的事情不是很准确。可以肯定的是默认情况下析构函数不执行。