A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hx32 高级黑马   /  2013-7-13 12:39  /  1115 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨兴庭 于 2013-7-13 15:15 编辑

看到一句话,构造函数和析构函数功能相反。
但是印象中毕老师视频上没有出现这个名词,之前的知识和接触中也没有出现这个名字
百度了一下,发现都是讲C里的析构函数,而没有讲java里的,害怕不稳的java基础再被C里的一些细微差别所误导,直接没敢看
希望有人帮忙总结一些,析构函数的定义。百度百科里是以C为例的,不敢看……

6 个回复

倒序浏览
java中没有析构函数,析构函数也是用来回收对象用的,不过java有自动回收机制,所以不用。如果自己想在对象被回收时做点什么事,可以重写Object类中的finalize()方法,该方法在对象被回收时调用

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
C里有析构函数吗?你可能说的是C++里的,在C++中对象调用构造函数初始化,等对象用完了,必须调用相应的析构函数来将对象销毁(内存有限嘛)。你看到的说构造函数和析构函数功能想法差不多就这个意思!
Java中就没这问题,对象用完以后gc(垃圾回收器)帮我自动识别哪些对象不用了,然后释放。
我觉得你如果你不知道就别想这些了,假如你没把Java和C都学通,两者混一起弄很有压力的。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
花心々小土豆 发表于 2013-7-13 13:29
C里有析构函数吗?你可能说的是C++里的,在C++中对象调用构造函数初始化,等对象用完了,必须调用相应的析 ...

确实都不会,所以直接就没敢看,怕把自己绕进去
可能是C++吧,真没敢看清,比恐怖片还可怕的感觉……
也就是说构造函数是为创建对象存在,而析构函数是为了销毁对象存在。如果是这样的话就没问题了,因为我就不用去想了,哈哈。
java自带的垃圾回收机制,虽然不懂,感觉目前也没必要懂,但是我知道有这么一个功能存在,是不定时清除内存中没有任何指向的数据(也就是垃圾)的。
不过追问一下,垃圾回收器是只针对堆内存中数据还是说针对哪几个内存区域?
回复 使用道具 举报
草貌路飞 发表于 2013-7-13 13:27
java中没有析构函数,析构函数也是用来回收对象用的,不过java有自动回收机制,所以不用。如果自己想在对象 ...

谢谢了
finaliz()方法在基础部分内存结构时讲堆内存和栈内存,毕老师提过一句,说是可以自己定义清除动作,留到以后讲。而我现在还没学到那里,所以不急于求成了。
知道java中没有析构函数是非常大的收获,要不然我就得疑惑好一阵了。
谢谢
回复 使用道具 举报
析构函数是C语言中好像是用来做内存处理的 ,功能和构造函数想法。析构函数在java中是没有的
回复 使用道具 举报
hx32 发表于 2013-7-13 13:55
确实都不会,所以直接就没敢看,怕把自己绕进去
可能是C++吧,真没敢看清,比恐怖片还可怕的感觉……
也 ...

垃圾回收器负责回收无用对象占据的内存资源,它只能释放那些由new分配的内存。所以它作用于堆内存中……
还有一些特殊的对象不是有new产生的,它就不能被垃圾回收器释放。(貌似这会finalize()方法就有用武之地了)
我知道的也不多,怕说多了我自己都绕进去了。如果你想进一步探讨,自己查些有关垃圾回收器如何工作的资料看看,什么“自适应的,分代的,停止-复制,标记-清扫”式垃圾回收器…………
加油!慢慢来,总有一天会懂的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马