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