java - clone()方法疑问
本文介绍了java - clone()方法疑问的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
我们知道Object基类有如下的方法:
问题一:
为什么唯独clone方法,在源码中要定义成protected呢?其他定义成public的呢?
问题二:
finalize()这个方法好像在项目中很少被用到,但是它能够被定义到基类当中,说明其重要性是很高的,那么这个具体如何使用?在什么情况下,必须使用,非用不可呢??
// 对象相关
getClass()
clone() - protected
toString()
equals(Object)
hashCode()
// 线程相关
notify()
notifyAll()
wait([long[, int]])
// GC相关
finalize()
解决方案
这个是为了防止被类外部直接调用。
因为clone
方法要先要实现Cloneable
接口,然后再重写clone()方法。
public class Test01 implements Cloneable{
}
这个函数你不常用只是可能没到足够的项目经验
如果你有较为底层的编程经验的时候(如C语言),你可能会比较注意内存的释放,然后资源的释放等。申请和释放必须成对出现。然而java中由于虚拟机的原因,存在垃圾回收机制,你可能从来没有关注过内存的释放问题。事实上,你也不太需要关注这个。
所以,很多人都知道构造函数
的同时,却忘记了对应的析构函数
。(上文提到过,Java会自动释放内存。)
但是:java
释放的是java
申请的内存。
如果你用java调用了c、C++,或者windows api的时候,其实这叫JNI(Java Native Interface)
,这里申请的内存,java是无法自动释放的,那么就可能需要通过finalize
来并行释放。
简单来讲,它就像一个析构函数一样的作用。
这篇关于java - clone()方法疑问的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文