易截截图软件、单文件、免安装、纯绿色、仅160KB

深入浅出Java clone技术

 这是clone技术介绍的第一篇。本篇主要介绍对象clone技术的基本知识。
Clone基本知识储备
在Java里提到clone技术,就不能不提java.lang.Cloneable接口和含有clone方法的Object类。所有具有clone功能的类都有一个特性,那就是它直接或间接地实现了Cloneable接口。否则,我们在尝试调用clone()方法时,将会触发CloneNotSupportedException异常。下面我们通过对Object类的部分源码的分析,来发现和理解这一特性。请看JDK中Object# clone()方法的源码:
/*
…………
* @return a clone of this instance.
* @exception? CloneNotSupportedException? if the object's class does not
*support the Cloneable interface. Subclasses
*that override the clone method can also
* throw this exception to indicate that an instance cannot
*be cloned.
* @see java.lang.Cloneable
*/
protected native Object clone() throws CloneNotSupportedException;
这段源码的@exception部分的描述内容证实了上文关于clone对象特性论断的正确性。它明确指出对象类必须支持Cloneable接口,否则即使派生类覆盖了Object#clone()方法,也同样会抛出CloneNotSupportedException这个异常。关于覆盖clone()方法,后续文章将会用专门篇幅进行比较详细的分析.
在上一篇中,介绍了java里clone的基本知识。本篇将着重描述如何实现clone。
l clone的实现
1.实现Cloneable接口
通过上一篇的介绍,我们知道,一个类若要具备clone功能,就必须实现Cloneable接口。做到这一步,clone功能已经基本实现了。Clone功能对我们来说,最主要的还是要能够使用它。那么我们如何才能使用clone功能呢?答案是覆盖Object#clone()方法。
2. 覆盖Object#clone()方法
为什么需要覆盖Object#clone()方法?这里得再次从jdk源码说起。JDK中Object# clone()方法的原型是:
protected native Object clone() throws CloneNotSupportedException;
是否注意到,这里clone()方法修饰符是protected,而不是public。这种访问的不可见性使得我们对Object#clone()方法不可见。相信读者已明白为什么要覆盖Object#clone()方法。而且,覆盖的方法的修饰符必须是public,如果还保留为protected,覆盖将变得没有实际意义。下面举一个具有clone功能的简单的例子:
/*
* 具有clone功能的类的例子
*/
public class CloneableObjExampl


相关文档:

JAVA字符串操作

1、   public class HelloWorld {
    public static void main(String args[]){
     String s="daxiong";
     System.out.println("Hello,World!"+"lu shenglong"+s);
     char c[]={'s','w','q'};
    &nb ......

java中如何把一个array复制到arrayList里

public static void  main(string[]  args)
{
     int[] arrayInt=new int[] {1,2,3,4,5}
     ArrayList  alist =ArrayList();
    //方法一
    foreach(int i in alist)
    {
 &nbs ......

UVAOj java输入输出


/**
* ### 真難的題目: 狗屁演算法 (測資很機車)
* 測驗結果: x.xx0 ms
* 測驗日期: 200y-mm-dd
* @author Raymond Wu (小璋丸)
*/
public class Main {
 
  // 輸入緩衝區 (緩衝空 ......

在Eclipse中将Java Project转换成Dynamic Web Project


编辑工程的.project文件:
添加
<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>

<natures>

& ......

java中HashMap遍历方法

方法一:
Map map = new HashMap();
Iterator iter = map.entrySet().iterator();
while (iter.hasNext()) {
    Map.Entry entry = (Map.Entry) iter.next();
    Object key = entry.getKey();
    Object val = entry.getValue();
}
方法二:
Map map = n ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号