מהו שיבוט ב- Java וסוגיו?

מאמר זה על שיבוט בג'אווה ייתן לך תובנות מפורטות לגבי תהליך השיבוט וסוגים שונים של שיבוט הנתמכים על ידי ג'אווה.

במהלך התכנות, לעתים קרובות אנו נתקלים בתרחישים בהם עלינו לעשות שימוש חוזר בחתיכת קוד שלמה. שכתוב הקוד הופך את התוכנית למגושמת, כל זאת תוך הפחתת יעילות התוכנית. לפיכך, ג'אווה מספקת לנו תכונה מצוינת אשר מצילה היא ממשימה מכבידה זו. זה ידוע בשם שיבוט בג'אווה ובאמצעות מאמר זה, אתן לך תובנות מלאות לגביו.

להלן הנושאים עליהם אדון במאמר זה:





שיבוט בג'אווה

שיבוט אובייקטים בג'אווה הוא תהליך יצירת עותק מדויק של האובייקט המקורי. במילים אחרות, זוהי דרך ליצור אובייקט חדש על ידי העתקת כל הנתונים והתכונות מהאובייקט המקורי. זה אפשרי רק על ידי יישום שיטת clone () של java.lang. אובייקט מעמד. שיטת השיבוט יוצרת עותק מדויק של אובייקט שעבורו הוא היהמופעל בסדר הקצאה לפי שדה ויחזיר את התייחסות האובייקט החדשה . דבר אחד שעליך לזכור, ב- Java, האובייקטים המיישמים את ממשק השיבוט שהוא ממשק סמן מורשים להשתמש בשכפול ().

עכשיו שאתה מודע למה שיבוט בג'אווה בואו נראה יתרונות שונים בשימוש בתכונה זו.



יתרונות השיבוט בג'אווה

להלן פירטתי כמה מהתכונות המסקרנות ביותר בשימוש בשיבוט ב- Java.

איך להעלות משהו לעוצמה בג'אווה
  • מסייע בהפחתת שורות הקוד.
  • דרך ההעתקה היעילה ביותרחפצים.
  • כמו כן, השיבוט () נחשב לשיטה המהירה ביותר להעתקת מערך.

הערה: אם כי שימוש בשיבוט עלול לגרום לבעיות עיצוב מסוימות, אך אם אתה משתמש בו בצורה אסטרטגית נכונה זה יכול להועיל לך.

סוגי שיבוט בג'אווה

ניתן לקבץ שיבוט ב- Javaלשתי קטגוריות:



  1. שיבוט רדוד
  2. שיבוט עמוק

בואו ונבין כל אחד מהם אחד אחד.

שיבוט רדוד

בג'אווה, כאשר תהליך השיבוט נעשה על ידי הפעלת שיטת השיבוט () הוא נקרא שיבוט רדוד. זהו תהליך השיבוט המוגדר כברירת מחדל ב- Java שבו ייווצר עותק רדוד של האובייקט המקורי עם שדה מדויק. במקרה שלאובייקט המקורי יש אזכורים לאובייקטים אחרים כשדות, אז רק ההפניות לאובייקט זה ישובטו במקום יצירת אובייקט חדש. במילים אחרות, אם תשנה את הערך של האובייקטים המשובטים אז זה יבוא לידי ביטוי גם במקור. לפיכך, שיבוט רדוד תלוי באובייקט המקורי.

עותק רדוד - שיבוט בגלהלן הבאתי את הדוגמה של אותו הדבר:

חבילה 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}} class EduLearner implement Cloneable {int eduName String EduCourse eduCourse public EduLearner (int eduId, String learnerName, EduCourse eduCourse) {this.eduId = eduId this.learnerName = learnerName this.eduCourse = eduCourse} // גרסת ברירת מחדל של שיבוט () clone () מוגן על אובייקט שיבוט () זורק cloneNotSupp .clone ()}} class public ShallowCloneSample {public static void main (String [] args) {EduCourse j2ee = EduCourse new ('Java', 'Spring', 'Microservices') לומד EduLear11 = EduLearner חדש (2811, 'מקס') , j2ee) EduLearner לומד 2 = נסי אפס {// יצירת שיבוט של לומד 1 והקצאתו ל לומד 2 לומד 2 = (EduLearner) לומד 1. שיבוט ()} לתפוס (CloneNotSupportedException e) {e.printStackTrace ()} // פרטי הדפסה של לומד 1 System.out.p rintln ('פרטי לומד 2:') System.out.println ('Id:' + learner1.eduId) System.out.println ('שם:' + learner1.learnerName) System.out.println ('Id Id: '+ 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 (לומד1. eduCourse.course3) // פרטי הדפסה של Learner2 System.out.println ('פרטי לומד 2:') System.out.println ('Id:' + learner2.eduId System.out.println ('שם:' + learner2.learnerName) System.out.println ('מזהה קורס:' + learner2.eduCourse) // הדפסת כל הקורסים של 'learner2' System.out.println ('קורסים של לומד 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 '// שינוי זה יבוא לידי ביטוי ב'לומד 1' המקורי System.out.println (' קורסים מעודכנים של לומד 2: ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1.eduCourse.course2) System.out.println (learner1.eduCourse.course3)}}

תְפוּקָה:

פרטים על לומד 2: מזהה: 2811 שם: מקסימום מזהה קורס: EduCourse @ 15db9742 קורסים של הלומד 1: מיקרו-שירותים באביב של Java פרטים על הלומד 2: Id: 2811 שם: מזהה קורס מקסימלי: EduCourse @ 15db9742 קורסים של הלומד 2: מיקרו-שירותים של Java Java קורסים מעודכנים של לומד 2: Java Spring JSP

שיבוט עמוק בג'אווה

בג'אווה, כאשר תהליך השיבוט נעשה על ידי הטמעת ממשק Cloneable זה נקרא Cloning Deep. בסוג זה של שיבוט, ייווצר עותק מדויק של כל שדות האובייקט המקורי. אך במקרה, לאובייקט המקורי יש אזכורים לאובייקטים אחרים כשדות ואז עותק של אובייקטים אלה ייווצר גם על ידי קריאה לשיטת clone (). זה הופך את האובייקט המשובט ללא תלות באובייקט המקורי וכל שינוי שנעשה באחד מהאובייקטים לא יבוא לידי ביטוי על האחר.

האידיאה הטובה ביותר לג'אווה למתחילים

להלן הבאתי את הדוגמה של אותו הדבר:

חבילה edureka בכיתה 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} שיבוט אובייקט מוגן () זורק CloneNceptionSupport להחזיר super.clone ()}} מחלקה EduLearner מיישמת Cloneable {int eduId String learnerName EduCourse eduCourse public EduLearner (int eduId, String learnerName, EduCourse eduCourse) {this.eduId = eduId this.learnerName = learnerName this.eduCourse}. eduCourse שיטת שיבוט משובט () ליצירת עותק עמוק של שיבוט אובייקט מוגן () משליך CloneNotSupportedException {EduLearner לומד = (EduLearner) super.clone () learner.eduCourse = (EduCourse) eduCourse.clone () לומד חוזר}} מחלקה ציבורית DeepCloneSample {public static void main (String [] args) {EduCourse j2ee = EduCourse new ('Java', 'Spring', 'Microservices') EduLearner learner1 = new EduLearner (2811, 'Max', j2ee) EduLearner ללמוד er2 = null נסה {// יצירת שיבוט של לומד 1 והקצאתו ללומד 2 לומד 2 = (EduLearner) לומד 1. שיבוט ()} תפוס (CloneNotSupportedException e) {e.printStackTrace ()} // פרטי הדפסה של מערכת System.out. println ('פרטי לומד 2:') System.out.println ('Id:' + learner1.eduId) System.out.println ('שם:' + learner1.learnerName) System.out.println ('Id Id: '+ 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 (לומד1. eduCourse.course3) // פרטי הדפסה של Learner2 System.out.println ('פרטי לומד 2:') System.out.println ('Id:' + learner2.eduId System.out.println ('שם:' + learner2.learnerName) System.out.println ('מזהה קורס:' + learner2.eduCourse) // הדפסת כל הקורסים של 'learner2' System.out.println ('קורסים של הלומד 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. קורס 3) // קורסים מעודכנים של לומד 2 System.out.println ('קורסים של לומד 2:') System.out.println (learner2.eduCourse.course1) System.out.println (learner2.eduCourse.course2) System.out. println (learner2.eduCourse.course3)}}

תְפוּקָה:

פרטים על לומד 2: מזהה: 2811 שם: מקסימום מזהה קורס: edureka.EduCourse@15db9742 קורסים של הלומד 1: מיקרו-שירותים באביב של Java פרטים על הלומד 2: מזהה: 2811 שם: מזהה קורס מקסימלי: edureka.EduCourse@6d06d69c קורסים של לומד 2 : קורסים של מיקרו-שירותים של אביב Java של קורסים 1: קורסים של Java-Spring של מיקרו-שירותים של לומד 2: Java Spring JSP

זה מביא אותנו לסוף מאמר זה בנושא שיבוט בג'אווה. אם אתה רוצה לדעת יותר על Java, אתה יכול לעיין בכתובת שלנו .

כעת לאחר שהבנתם מהו שיבוט בג'אווה, בדקו את מאת אדוריקה, חברת למידה מקוונת מהימנה עם רשת של יותר מ -250,000 לומדים מרוצים הפזורים ברחבי העולם. קורס ההכשרה וההסמכה של Java J2EE ו- SOA של אדוריקה מיועד לסטודנטים ואנשי מקצוע שרוצים להיות מפתח Java. הקורס נועד לתת לך יתרון בתכנות ג'אווה ולהכשיר אותך למושגי ג'אווה מרכזיים ומתקדמים יחד עם מסגרות ג'אווה שונות כמו Hibernate & Spring.

יש לך שאלה עבורנו? אנא הזכיר זאת במדור ההערות במאמר זה 'שיבוט בג'אווה' ונחזור אליך בהקדם האפשרי.