>Java >java지도 시간 >Java에서 얕은 복제와 깊은 복제에 관련된 clone() 메서드를 간략하게 설명합니다.

Java에서 얕은 복제와 깊은 복제에 관련된 clone() 메서드를 간략하게 설명합니다.

Y2J
Y2J원래의
2017-05-04 10:11:072311검색

Java 클론(Clone)은 Java 언어의 기능 중 하나입니다. 이 기사에서는 Java의 Clone 메커니즘이 어떻게 작동하는지 주로 소개합니다. 필요한 친구는 이를 참조할 수 있습니다.

이제 Clone은 더 이상 새로운 것 "Dolly"라는 단어가 등장하면서 이 단어는 실제로 "인기"가 되었습니다. 얼마 후 Java에도 이러한 개념이 있어 객체 를 쉽게 "생성"할 수 있습니다. 자, Java의 복제 메커니즘이 어떻게 작동하는지 자세히 살펴보겠습니다.

1. 복제 및 복사

지금 Employee 개체가 있다고 가정합니다. Employee tobby =new Employee("CMTobby",5000), 일반적으로
이러한 할당이 있습니다 Employee cindyelf=tobby, this 당시에는 cindyelf와 tobby 모두 메모리에서 동일한 객체를 가리키고 있었기 때문에 cindyelf나 tobby의 연산이 상대방에게 영향을 미칠 수 있었습니다.

예를 들어 cindyelf.raiseSalary() 메서드를 통해 급여 필드의 값을 변경하면 tobby가 getSalary() 메서드를 통해 얻는 것은 급여 필드의 수정된 값이 아닙니다. 우리가 보고 싶은 것이 도착했습니다. 우리는 서로에게 영향을 주지 않고 정확한 tobby 복사본을 얻을 수 있기를 바랍니다. 이때 Clone을 사용하여 요구 사항을 충족할 수 있습니다.

Employee cindy=tobby.clone(), 새로운 Employee 객체가 생성되고 tobby와 동일한 속성 값과 메소드를 갖습니다.

2. Shallow Clone&Deep Clone

클론은 어떻게 이루어지나요? 개체는 복제를 구현할 때 개체에 대해 아무것도 모릅니다. 이는 단순히 도메인 간 복사를 수행하는 것입니다.

이런 식으로 문제가 발생합니다. Employee를 예로 들자면, 거기에는 HireDay라는 필드가 있습니다. 이는 기본 유형인 변수가 아니라 참조 변수입니다. 새로운 Date 유형 참조는 원본 객체의 해당 필드와 동일한 Date 객체를 가리킵니다. 이러한 방식으로 복제된 클래스는 정보의 일부를 원본 클래스와 공유합니다. 그 과정에서 그림과 같이 분명히 불리합니다:

이때 우리는 기본이 아닌 유형의 필드에 대해 심층 복제 및 특수 처리를 수행해야 합니다. 이 예에서는 고용일입니다. 다음 코드와 같이 Clone 메소드를 재정의하고 고용일에 특수 처리를 수행할 수 있습니다.

 class Employee implements Cloneable 
{ 
  public Object clone() throws CloneNotSupportedException 
  { 
   Employee cloned = (Employee) super.clone(); 
  cloned.hireDay = (Date) hireDay.clone() 
  return cloned; 
  } 
}

3. Clone() 메소드의 보호 메커니즘

Clone()은 Object에서 protected로 선언됩니다. Employee

클래스를 예로 들어보겠습니다. , Employee 클래스만 Employee 개체를 "복제"할 수 있도록 보장할 수 있습니다. 원칙에 대해서는 공개, 보호 및 비공개에 대한 이전 연구 노트를 참조할 수 있습니다.

4. Clone() 메소드 사용

Clone() 메소드 사용은 비교적 간단합니다. 다음 사항에 주의하세요.

a. 얕은 클론을 사용할 때와 깊은 클론을 사용할 때는 주로 특정 개체의 도메인 특성에 따라 다릅니다. 기본 유형은 여전히 ​​참조 변수입니다

b. Clone() 메소드를 호출하는 객체가 속한 클래스는 Clonable

interface를 구현해야 하며, 그렇지 않으면 Clone 메소드 호출 시 CloneNotSupportedException이 발생합니다.

위 내용은 Java에서 얕은 복제와 깊은 복제에 관련된 clone() 메서드를 간략하게 설명합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.