>  기사  >  Java  >  Java에서 clone() 메소드의 중요성은 무엇입니까?

Java에서 clone() 메소드의 중요성은 무엇입니까?

王林
王林앞으로
2023-09-14 14:25:02825검색

Java에서 clone() 메소드의 중요성은 무엇입니까?

clone() 메서드는 Cloneable 인터페이스를 구현하는 클래스 객체의 복사본을 만드는 데 사용됩니다. 기본적으로 Object 클래스는 객체가 이 메서드를 호출하는 특정 클래스의 멤버를 모르기 때문에 필드별로 복사합니다. 따라서 클래스에 기본 데이터 유형 멤버만 있는 경우 개체의 새 복사본이 생성되고 개체의 새 복사본에 대한 참조가 반환됩니다. 그러나 클래스에 클래스 유형의 멤버가 포함되어 있으면 해당 멤버에 대한 개체 참조만 복사되므로 원본 개체와 복제된 개체 모두의 멤버 참조는 동일한 개체를 참조합니다.

Cloneable 인터페이스를 구현하지 않는 클래스의 객체에 대해 clone() 메서드를 호출하려고 하면 CloneNotSupportedException 을 받게 됩니다. 인터페이스는 태그가 지정된 인터페이스이며, 구현은 단순히 구현 클래스의 객체에서 Object.clone() 메서드를 호출할 수 있음을 나타냅니다.

구문

<strong>protected Object clone() throws CloneNotSupportedException</strong>

clone() 메소드는 두 가지 방법으로 구현할 수 있습니다

Shallow copy

이것은 Object.clone() 메소드에서 제공하는 기본 복제 기능의 결과입니다. 기본 데이터 유형 멤버) . 단순 복사의 경우 참조된 개체가 아닌 개체 참조만 복사되므로 복제된 개체도 원본 개체가 참조하는 동일한 개체를 참조합니다.

Example

public class ShallowCopyTest {
   public static void main(String args[]) {
      A a1 = new A();
      A a2 = (A) a1.clone();
      a1.sb.append("Tutorialspoint!");
      System.out.println(a1);
      System.out.println(a2);
   }
}
class A implements Cloneable {
   public StringBuffer sb = new StringBuffer("Welcome to ");
      public String toString() {
         return sb.toString();
      }
   public Object clone() {
      try {
         return super.clone();
      } catch(CloneNotSupportedException e) {
      }
      return null;
   }
}

Output

Welcome to Tutorialspoint!
Welcome to Tutorialspoint!

Deep copy

deep copy를 구현하려면 비기본 유형 클래스의 clone()메서드 멤버를 재정의해야 합니다. 멤버 객체, 기본 복제 메커니즘은 이를 수행하지 않습니다.

public class DeepCopyTest {
   public static void main(String args[]) {
      A a1 = new A();
      A a2 = (A) a1.clone();
      a1.sb.append(" TutorialsPoint!");
      System.out.println(a1);
      System.out.println(a2);
   }
}
class A implements Cloneable {
   public StringBuffer sb = new StringBuffer("Welcome to ");
   public String toString() {
      return sb.toString();
   }
   public Object clone() {
      try {
         A a = (A) super.clone();
         a.sb = new StringBuffer(sb.toString());
         return a;
      }
      catch(CloneNotSupportedException e) {
      }
      return null;
   }
}

출력

Welcome to TutorialsPoint!
Welcome to

위 내용은 Java에서 clone() 메소드의 중요성은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 tutorialspoint.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제