> Java > java지도 시간 > Java에서 clone() 메소드의 중요성은 무엇입니까?

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

王林
풀어 주다: 2023-09-14 14:25:02
앞으로
873명이 탐색했습니다.

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으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿