⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clonedemo2.java

📁 java2参考大全上的例子的源码和自己的理解.
💻 JAVA
字号:
package clone;

/**
 clone( )方法创建调用它的对象的一个复制副本。只有那些实现Cloneable接口的类
能被复制。
Cloneable接口没有定义成员。它通常用于指明被创建的一个允许对对象进行位复制(也
就是对象副本)的类。如果试图用一个不支持Cloneable接口的类调用clone( )方法,将引发
一个CloneNotSupportedException异常。当一个副本被创建时,并没有调用被复制对象的构
造函数。副本仅仅是原对象的一个简单精确的拷贝。

 复制是一个具有潜在危险的操作,因为它可能引起不是你所期望的副作用。例如,假
 如被复制的对象包含了一个称为obRef的引用变量,当副本创建时,副本中的obRef如同原
 对象中的obRef一样引用相同的对象。如果副本改变了被obRef引用的对象的内容,那么对
 应的原对象也将被改变。这里是另一个例子。如果一个对象打开一个I/O流并被复制,两个
 对象将可操作相同的流。而且,如果其中一个对象关闭了流,而另一个对象仍试图对I/O流
 进行写操作的话,将导致错误。
 由于复制可能引起问题,因此在Object内,clone( )方法被说明为protected。这就意味着
 它必须或者被由实现Cloneable的类所定义的方法调用,或者必须被那些类显式重载以便它
 是公共的。让我们看关于下面每一种方法的例子。
 下面的程序实现Cloneable接口并定义cloneTest( )方法,该方法在Object中调用clone( )
 方法


 下面的例子重载clone( )方法以便它能被其类外的程序所调用。为了完成这项功能,它
 的存取说明符必须是public,如下所示:

 */

// Override the clone() method.

class TestClone
    implements Cloneable {
  int a;
  double b;

  // clone() is now overridden and is public.
  public Object clone() {
    try {
      // call clone in Object.
      return super.clone();
    }
    catch (CloneNotSupportedException e) {
      System.out.println("Cloning not allowed.");
      return this;
    }
  }
}

class CloneDemo2 {
  public static void main(String args[]) {
    TestClone x1 = new TestClone();
    TestClone x2;

    x1.a = 10;
    x1.b = 20.98;

    // here, clone() is called directly.
    x2 = (TestClone) x1.clone();

    System.out.println("x1: " + x1.a + " " + x1.b);
    System.out.println("x2: " + x2.a + " " + x2.b);
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -