易截截图软件、单文件、免安装、纯绿色、仅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代码获取数据库连接并操作数据库用户

 
ADF中获得数据库连接,读取xml文件的数据,并将其写到数据库中:
public static void main(String[] argv) throws Exception {
       //获得驱动
        Class driverClass = Class.forName("oracle.jdbc.OracleDriver");
  &nb ......

主题:Java程序员的知识架构浅析

作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从。我想就我自己读过的技术书籍中挑选出来一些,
按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水平的Java程序员们。
一、Java编程入门类
对于没有Java编程经验的Java程序员要入门,随便读什么入门书籍都一 ......

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 ......

java 包的编写(package)

(注意:下面文件都在f:\myjava中)
{
3个源文件:MyApp.java,MyLib.java,PrintSchool.java;
建文件夹org\Jie
其中MyLib和PrintSchool放在包org.Jie中(import org.Jie)
在cmd.exe中运行
    javac  -d org\Jie MyLib.java    //在org\Jie\org\jie生成了MyLib.class文件,将该文件 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号