java中怎么没有析构函数?

 我来答
___迷↗苍燳憙
推荐于2017-09-05 · TA获得超过106个赞
知道答主
回答量:139
采纳率:0%
帮助的人:157万
展开全部
java中有析构函数,但我们一般用不到它,因为java有自动内存回收机制,无需程序员来释放,也就不要担心内存泄露,只不过java中析构函数所采用的方式不是C++中的那样前加~号,在java中
对象析构时会调用void finalize()方法,因此你如果确实需要析构的话就可以为你写的类添加一个void finalize(){}方法,来完成你所需要的工作
ttjjssggnnoo
推荐于2017-12-04 · TA获得超过534个赞
知道小有建树答主
回答量:313
采纳率:50%
帮助的人:267万
引用___迷↗苍燳憙的回答:
java中有析构函数,但我们一般用不到它,因为java有自动内存回收机制,无需程序员来释放,也就不要担心内存泄露,只不过java中析构函数所采用的方式不是C++中的那样前加~号,在java中
对象析构时会调用void finalize()方法,因此你如果确实需要析构的话就可以为你写的类添加一个void finalize(){}方法,来完成你所需要的工作
展开全部
答案有误。
java并没有提供析构函数或相似的概念,代之以java的垃圾回收机制,但是垃圾回收并不等同于“析构”,而作为垃圾回收机制的一部分,finalize()方法更不能视为c++中的析构函数。这是因为:如果C++程序没有缺陷,那么析构函数会被自动调用并完成清理工作,这一动作是一定会执行的;而java的垃圾回收只与内存有关,只要程序没有濒临存储空间耗尽,那么与垃圾回收有关的任何行为(尤其是finalize()方法)都不会执行,换言之,java里的对象并非一定会被垃圾回收!进而,如果java想要实现类似c++析构函数的清理效果,必须编写恰当的清理方法,并明确调用,而不是依靠finalize()方法,还是那句话,JVM如果没有面临内存耗尽,它不会浪费时间执行垃圾回收以恢复内存,遑论这期间调用finalize()方法的环节,所以并不能保证finalize()方法一定执行,这(极大)可能会达不到你想要的清理效果。关于finalize()方法的应用场景,我觉得java编程思想中将其作为“终结条件”来验证对象清理回收前的状态以检查编程缺陷是很有启发性的。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式