การโคลนใน Java คืออะไรและประเภทของมันคืออะไร?



บทความเกี่ยวกับการโคลนใน Java นี้จะให้ข้อมูลเชิงลึกโดยละเอียดเกี่ยวกับกระบวนการโคลนและการโคลนประเภทต่างๆที่ Java สนับสนุน

ในขณะที่เขียนโปรแกรมเรามักจะเจอสถานการณ์ที่เราต้องนำโค้ดที่สมบูรณ์มาใช้ซ้ำ การเขียนโค้ดซ้ำจะทำให้โปรแกรมมีขนาดใหญ่ในขณะที่ประสิทธิภาพของโปรแกรมลดลง ดังนั้น Java จึงมอบคุณสมบัติที่ยอดเยี่ยมให้กับเราซึ่งการช่วยชีวิตมาจากงานที่เป็นภาระนี้ สิ่งนี้เรียกว่าการโคลนใน Java และผ่านสื่อของบทความนี้ฉันจะให้ข้อมูลเชิงลึกทั้งหมดแก่คุณ

ด้านล่างนี้เป็นหัวข้อที่ฉันจะพูดถึงในบทความนี้:





การโคลนใน Java

การโคลนอ็อบเจ็กต์ใน Java เป็นกระบวนการสร้างสำเนาของอ็อบเจ็กต์ดั้งเดิม กล่าวอีกนัยหนึ่งก็คือวิธีการสร้างวัตถุใหม่โดยการคัดลอกข้อมูลและแอตทริบิวต์ทั้งหมดจากวัตถุดั้งเดิม สิ่งนี้เป็นไปได้โดยใช้วิธีการ clone () ของไฟล์ java.lang.Object ชั้นเรียน วิธีการโคลนจะสร้างสำเนาของวัตถุที่เคยเป็นมาเรียกใช้ในลำดับการกำหนดฟิลด์ต่อฟิลด์และจะส่งคืนการอ้างอิงอ็อบเจ็กต์ใหม่ . สิ่งหนึ่งที่คุณต้องจำไว้ใน Java อ็อบเจ็กต์ที่ใช้อินเทอร์เฟซโคลนซึ่งเป็นอินเทอร์เฟซเครื่องหมายได้รับอนุญาตให้ใช้ clone ()

ตอนนี้คุณทราบแล้วว่าโคลนใน Java คืออะไรมาดูข้อดีต่างๆของการใช้คุณลักษณะนี้กัน



ข้อดีของการโคลนใน Java

ด้านล่างนี้ฉันได้ระบุคุณสมบัติที่น่าสนใจที่สุดบางประการของการใช้การโคลนใน Java

วิธีการซ่อนใน java คืออะไร
  • ช่วยในการลดบรรทัดของรหัส
  • วิธีการคัดลอกที่มีประสิทธิภาพและประสิทธิผลสูงสุดวัตถุ
  • นอกจากนี้ clone () ยังถือเป็นวิธีที่เร็วที่สุดในการคัดลอกอาร์เรย์

หมายเหตุ: แม้ว่าการใช้การโคลนอาจส่งผลให้เกิดปัญหาในการออกแบบ แต่ถ้าคุณใช้อย่างมีกลยุทธ์ที่เหมาะสมก็จะเป็นประโยชน์ต่อคุณ

ประเภทของการโคลนใน Java

การโคลนใน Java สามารถจัดกลุ่มได้เป็นสองประเภท:



  1. โคลนนิ่งตื้น
  2. การโคลนลึก

มาทำความเข้าใจกับแต่ละคนทีละคน

โคลนนิ่งตื้น

ใน Java เมื่อกระบวนการโคลนเสร็จสิ้นโดยเรียกใช้เมธอด clone () เรียกว่า Shallow Cloning เป็นกระบวนการโคลนเริ่มต้นใน Java ซึ่งจะสร้างสำเนาตื้นของวัตถุดั้งเดิมด้วยฟิลด์ที่แน่นอน ในกรณีที่ออบเจ็กต์ดั้งเดิมมีการอ้างอิงถึงอ็อบเจ็กต์อื่น ๆ เป็นฟิลด์ดังนั้นเฉพาะการอ้างอิงของอ็อบเจ็กต์นั้นเท่านั้นที่จะถูกโคลนแทนการสร้างอ็อบเจ็กต์ใหม่ กล่าวอีกนัยหนึ่งคือถ้าคุณเปลี่ยนค่าของวัตถุที่ถูกโคลนแล้วมันก็จะแสดงในต้นฉบับเช่นกัน ดังนั้นการโคลนนิ่งแบบตื้นขึ้นอยู่กับวัตถุดั้งเดิม

สำเนาตื้น - การโคลนใน Java - Edurekaด้านล่างฉันได้ให้ตัวอย่างเดียวกัน:

package edureka class EduCourse {String course1 String course2 String course3 public EduCourse (String crs1, String crs2, String crs3) {this.course1 = crs1 this.course2 = crs2 this.course3 = crs3}} คลาส EduLearner ใช้ Cloneable {int eduId String learnerName EduCourse eduCourse สาธารณะ EduLearner (int eduId, String learnerName, EduCourse eduCourse) {this.eduId = eduId this.learnerName = learnerName this.eduCourse = eduCourse} // เวอร์ชันเริ่มต้นของการโคลน () วิธีการที่ได้รับการป้องกัน Object clone () จะพ่นคืนค่า CloneExpported {) .clone ()}} คลาสสาธารณะ ShallowCloneSample {public static void main (String [] args) {EduCourse j2ee = new EduCourse ('Java', 'Spring', 'Microservices') EduLearner learner1 = new EduLearner (2811, 'Max' , j2ee) EduLearner learner2 = null ลอง {// การสร้างโคลนของผู้เรียน 1 และกำหนดให้กับผู้เรียน 2 ผู้เรียน 2 = (EduLearner) learner1.clone ()} catch (CloneNotSupportedException e) {e.printStackTrace ()} // การพิมพ์รายละเอียดของ Learner1 System.out.p rintln ('รายละเอียดของผู้เรียน 2:') System.out.println ('Id:' + learner1.eduId) System.out.println ('ชื่อ:' + learner1.learnerName) System.out.println ('รหัสหลักสูตร: '+ learner1.eduCourse) // การพิมพ์หลักสูตรทั้งหมดของ' learner1 'System.out.println (' Courses of Learner 1: ') System.out.println (learner1.eduCourse.course1) System.out.println (ผู้เรียน 1. eduCourse.course2) System.out.println (learner1.eduCourse.course3) // การพิมพ์รายละเอียดของ Learner2 System.out.println ('รายละเอียดของผู้เรียน 2:') System.out.println ('Id:' + learner2.eduId ) System.out.println ('Name:' + learner2.learnerName) System.out.println ('Course Id:' + learner2.eduCourse) // การพิมพ์หลักสูตรทั้งหมดของ 'learner2' System.out.println ('Courses ของผู้เรียน 2: ') System.out.println (learner2.eduCourse.course1) System.out.println (learner2.eduCourse.course2) System.out.println (learner2.eduCourse.course3) // การเปลี่ยนหลักสูตร 3 ของ' ผู้เรียน 2 'learner2.eduCourse.course3 =' JSP '// การเปลี่ยนแปลงนี้จะแสดงใน' learner1 'System.out.println ดั้งเดิม (' ปรับปรุงหลักสูตรของผู้เรียน 2: ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1.eduCourse.course2) System.out.println (learner1.eduCourse.course3)}}

เอาท์พุต:

รายละเอียดของผู้เรียน 2: Id: 2811 ชื่อ: Max Course Id: EduCourse @ 15db9742 Courses of Learner 1: Java Spring Microservices รายละเอียดของผู้เรียน 2: Id: 2811 ชื่อ: Max Course Id: EduCourse @ 15db9742 Courses of Learner 2: Java Spring Microservices ปรับปรุงหลักสูตรของผู้เรียน 2: Java Spring JSP

การโคลนลึกใน Java

ใน Java เมื่อกระบวนการโคลนเสร็จสิ้นโดยใช้อินเทอร์เฟซ Cloneable เรียกว่า Deep Cloning ในการโคลนประเภทนี้จะมีการสร้างสำเนาของฟิลด์ทั้งหมดของออบเจ็กต์ดั้งเดิม แต่ในกรณีที่ออบเจ็กต์ดั้งเดิมมีการอ้างอิงถึงอ็อบเจ็กต์อื่นเป็นฟิลด์จากนั้นสำเนาของอ็อบเจ็กต์เหล่านั้นจะถูกสร้างขึ้นโดยการเรียกเมธอด clone () สิ่งนี้ทำให้วัตถุที่โคลนเป็นอิสระจากวัตถุดั้งเดิมและการเปลี่ยนแปลงใด ๆ ที่เกิดขึ้นในวัตถุใด ๆ จะไม่สะท้อนกับวัตถุอื่น

r การเรียนรู้ของเครื่องตามตัวอย่าง

ด้านล่างฉันได้ให้ตัวอย่างเดียวกัน:

package edureka class EduCourse ใช้ Cloneable {String course1 String course2 String course3 public EduCourse (String crs1, String crs2, String crs3) {this.course1 = crs1 this.course2 = crs2 this.course3 = crs3} การโคลนวัตถุที่มีการป้องกัน () พ่น CloneNotSupportedException { return super.clone ()}} คลาส EduLearner ใช้ Cloneable {int eduId String learnerName EduCourse eduCourse public EduLearner (int eduId, String learnerName, EduCourse eduCourse) {this.eduId = eduId this.learnerName = learnerCourse = eduCourse วิธีการแทนที่ clone () สำหรับการสร้างสำเนาลึกของ Object ที่ได้รับการป้องกัน Object clone () พ่น CloneNotSupportedException {EduLearner learner = (EduLearner) super.clone () learner.eduCourse = (EduCourse) eduCourse.clone () return learner}} คลาสสาธารณะ DeepCloneSample {public static void main (String [] args) {EduCourse j2ee = new EduCourse ('Java', 'Spring', 'Microservices') EduLearner learner1 = new EduLearner (2811, 'Max', j2ee) EduLearner เรียนรู้ er2 = null ลอง {// การสร้างโคลนของผู้เรียน 1 และกำหนดให้กับผู้เรียน 2 ผู้เรียน 2 = (EduLearner) learner1.clone ()} catch (CloneNotSupportedException e) {e.printStackTrace ()} // การพิมพ์รายละเอียดของ Learner1 System.out println ('รายละเอียดของผู้เรียน 2:') System.out.println ('Id:' + learner1.eduId) System.out.println ('Name:' + learner1.learnerName) System.out.println ('รหัสหลักสูตร: '+ learner1.eduCourse) // การพิมพ์หลักสูตรทั้งหมดของ' learner1 'System.out.println (' Courses of Learner 1: ') System.out.println (learner1.eduCourse.course1) System.out.println (ผู้เรียน 1. eduCourse.course2) System.out.println (learner1.eduCourse.course3) // การพิมพ์รายละเอียดของ Learner2 System.out.println ('รายละเอียดของผู้เรียน 2:') System.out.println ('Id:' + learner2.eduId ) System.out.println ('Name:' + learner2.learnerName) System.out.println ('Course Id:' + learner2.eduCourse) // การพิมพ์หลักสูตรทั้งหมดของ 'learner2' System.out.println ('Courses ของผู้เรียน 2: ') System.out.println (learner2.eduCourse.course1) System.out.printl n (learner2.eduCourse.course2) System.out.println (learner2.eduCourse.course3) // การเปลี่ยนหลักสูตร 3 ของ 'ผู้เรียน 2' ผู้เรียน 2.eduCourse.course3 = 'JSP' // การเปลี่ยนแปลงนี้จะไม่แสดงในต้นฉบับ ' ผู้เรียน 1 'System.out.println (' หลักสูตรของผู้เรียน 1: ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1.eduCourse.course2) System.out.println (learner1.eduCourse. course3) // ปรับปรุงหลักสูตรของผู้เรียน 2 System.out.println ('หลักสูตรของผู้เรียน 2:') System.out.println (learner2.eduCourse.course1) System.out.println (learner2.eduCourse.course2) System.out println (learner2.eduCourse.course3)}}

เอาท์พุต:

รายละเอียดของผู้เรียน 2: Id: 2811 ชื่อ: Max Course Id: edureka.EduCourse@15db9742 Courses of Learner 1: Java Spring Microservices รายละเอียดของผู้เรียน 2: Id: 2811 ชื่อ: Max Course Id: edureka.EduCourse@6d06d69c Courses of Learner 2 : Java Spring Microservices Courses of Learner 1: Java Spring Microservices Courses of Learner 2: Java Spring JSP

เรามาถึงตอนท้ายของบทความนี้เกี่ยวกับการโคลนใน Java หากคุณต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับ Java คุณสามารถอ้างถึงไฟล์ .

ตอนนี้คุณเข้าใจแล้วว่าโคลนใน Java คืออะไรลองดูไฟล์ โดย Edureka บริษัท การเรียนรู้ออนไลน์ที่เชื่อถือได้ซึ่งมีเครือข่ายผู้เรียนที่พึงพอใจมากกว่า 250,000 คนกระจายอยู่ทั่วโลก หลักสูตรการฝึกอบรมและการรับรอง Java J2EE และ SOA ของ Edureka ออกแบบมาสำหรับนักเรียนและผู้เชี่ยวชาญที่ต้องการเป็น Java Developer หลักสูตรนี้ออกแบบมาเพื่อให้คุณเริ่มต้นการเขียนโปรแกรม Java และฝึกอบรมแนวคิด Java ทั้งหลักและขั้นสูงพร้อมกับเฟรมเวิร์ก Java ต่างๆเช่น Hibernate & Spring

มีคำถามสำหรับเรา? โปรดระบุไว้ในส่วนความคิดเห็นของบทความ 'การโคลนใน Java' และเราจะติดต่อกลับโดยเร็วที่สุด