谁用过  说一说 最好有例子

解决方案 »

  1.   

    class Student implements Cloneable{
    String name;
    Student(String name){
    this.name=name;
    }
    public Object clone(){
    Object o;
    try{
    o=super.clone(); //调用基类Object的clone()发法,根据多态性原理,Object类可以判断出返回的是什么类型的对象;
    }
    catch(CloneNotSupportException e){
    e.printStackTrace();
    }
    return o;
    }
    }public CloneTest{
    public static void main(String [] args){
    Student s1 = new Student("zhangshan");
    Student s2 = (Student)s1.clone(); //获得s1所指向的对象的一个拷贝
    s2.name="lisi"; //修改s2.name 不会影响s1,因为在内存中s2指向的是s1的一个拷贝(与s1指向的不是同一个内存空间),对其修改不会影响s1;
    System.out.println(s1.name); //输出s1.name 仍然是zhangshan
    Student s3=s1; //引用s1的值赋给s3,s1和s3指向的是同一个对象(堆中的同一个地址,即对象new Student("zhangshan")的首地址)
    s3.name="lisi"; //修改s3.name与修改s1.name的效果是一样的
    System.out.println(s1.name); //输出s1.name变为lisi;
    }
    }另外注:java中参数传递,如果传递的是基本数据类型,那么是按值传递(这点比较好理解),如果传递是引用类型,实际上也可以理解为是“传值”,这里这个值,是引用的值的拷贝,即对象的首地址,这样就会导致在函数内部可以修改外部对象,有时候我们并不希望这样的结果,正如上面的例子,我们仅仅是希望获得外部对象的一个拷贝并在函数内部修改,而不希望修改影响原始的对象,这时候就需要用到对象的拷贝。要实现对象的克隆就要使对象实现Cloneable接口,该接口是一个标识性质的接口,没有定义任何方法。但我们必须显性调用基类Object的clone()方法,已返回一个拷贝对象;