Podczas programowania często napotykamy scenariusze, w których musimy ponownie wykorzystać cały fragment kodu. Przepisanie kodu powoduje, że program jest nieporęczny, a jednocześnie zmniejsza wydajność programu. W ten sposób Java zapewnia nam doskonałą funkcję, która ratuje przed tym uciążliwym zadaniem. Nazywa się to klonowaniem w Javie i za pośrednictwem tego artykułu przedstawię ci pełny wgląd w to.
Poniżej znajdują się tematy, które omówię w tym artykule:
Klonowanie w Javie
Klonowanie obiektów w Javie to proces tworzenia dokładnej kopii oryginalnego obiektu. Innymi słowy, jest to sposób na utworzenie nowego obiektu poprzez skopiowanie wszystkich danych i atrybutów z oryginalnego obiektu. Jest to możliwe tylko poprzez zaimplementowanie metody clone () pliku java.lang.Object klasa. Metoda clone tworzy dokładną kopię obiektu, dla którego została utworzonawywoływane w kolejności przypisywania pola po polu i zwróci nowe odwołanie do obiektu . Jedna rzecz, o której musisz pamiętać, w Javie obiekty implementujące interfejs klonowania, który jest interfejsem znaczników, mogą używać funkcji clone ().
jaka jest struktura danych w java
Teraz, gdy wiesz już, co klonuje w Javie, zobaczmy różne zalety korzystania z tej funkcji.
Zalety klonowania w Javie
Poniżej wymieniłem kilka najbardziej intrygujących funkcji klonowania w Javie.
- Pomaga w redukcji linii kodu.
- Najbardziej efektywny i wydajny sposób kopiowaniaobiekty.
- Ponadto clone () jest uważane za najszybszą metodę kopiowania tablicy.
Uwaga: chociaż używanie klonowania może powodować pewne problemy projektowe, ale jeśli używasz go w odpowiedni strategiczny sposób, może to przynieść korzyści.
Rodzaje klonowania w Javie
Klonowanie w Javie można grupowaćna dwie kategorie:
- Płytkie klonowanie
- Głębokie klonowanie
Zrozummy każdy z nich po kolei.
Płytkie klonowanie
W Javie, gdy proces klonowania jest wykonywany przez wywołanie metody clone (), nazywa się to Shallow Cloning. Jest to domyślny proces klonowania w Javie, w którym zostanie utworzona płytka kopia oryginalnego obiektu z dokładnym polem. W przypadku, gdy oryginalny obiekt zawiera odniesienia do niektórych innych obiektów jako pola, wówczas tylko odniesienia do tego obiektu zostaną sklonowane zamiast tworzenia nowego obiektu. Innymi słowy, jeśli zmienisz wartość sklonowanych obiektów, zostanie to również odzwierciedlone w oryginale. Tak więc płytkie klonowanie zależy od oryginalnego obiektu.
jak rzucić podwójnie na int
Poniżej podałem przykład tego samego:
pakiet 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 implementuje Cloneable {int eduameId String learnerN EduCourse eduCourse public EduLearner (int eduId, String learnerName, EduCourse eduCourse) {this.eduId = eduId this.learnerName = learnerName this.eduCourse = eduCourse} // Domyślna wersja metody clone () super chroniona Clupport clone () throws .clone ()}} klasa public ShallowCloneSample {public static void main (String [] args) {EduCourse j2ee = new EduCourse ('Java', 'Spring', 'Microservices') EduLearner learner1 = new EduLearner (2811, 'Max' , j2ee) EduLearner learner2 = null try {// Tworzenie klonu ucznia1 i przypisywanie go do ucznia2 learner2 = (EduLearner) learner1.clone ()} catch (CloneNotSupportedException e) {e.printStackTrace ()} // Drukowanie szczegółów ucznia1 System.out.p rintln ('Szczegóły ucznia 2:') System.out.println ('Id:' + learner1.eduId) System.out.println ('Name:' + learner1.learnerName) System.out.println ('Identyfikator kursu: '+ learner1.eduCourse) // Drukowanie wszystkich kursów' learner1 'System.out.println (' Courses of Learner 1: ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1. eduCourse.course2) System.out.println (learner1.eduCourse.course3) // Drukowanie szczegółów Learner2 System.out.println ('Details of Learner 2:') System.out.println ('Id:' + learner2.eduId ) System.out.println ('Name:' + learner2.learnerName) System.out.println ('Course Id:' + learner2.eduCourse) // Drukowanie wszystkich kursów 'learner2' System.out.println ('Kursy of Learner 2: ') System.out.println (learner2.eduCourse.course1) System.out.println (learner2.eduCourse.course2) System.out.println (learner2.eduCourse.course3) // Zmiana kursu3 z' learner2 'learner2.eduCourse.course3 =' JSP '// Ta zmiana zostanie odzwierciedlona w oryginalnym' learner1 'System.out.println (' Zaktualizowane kursy uczestnika 2: ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1.eduCourse.course2) System.out.println (learner1.eduCourse.course3)}}
Wynik:
Szczegóły ucznia 2: Id: 2811 Nazwa: Maksymalny identyfikator kursu: EduCourse @ 15db9742 Kursy ucznia 1: Mikrousługi Java Spring Szczegóły ucznia 2: Id: 2811 Nazwa: Maksymalny identyfikator kursu: EduCourse @ 15db9742 Kursy ucznia 2: Mikrousługi Java Spring Zaktualizowane kursy Learner 2: Java Spring JSP
Głębokie klonowanie w Javie
W Javie proces klonowania odbywa się poprzez implementację interfejsu Cloneable, nazywa się to Deep Cloning. W przypadku tego typu klonowania zostanie utworzona dokładna kopia wszystkich pól oryginalnego obiektu. Ale w przypadku, gdy oryginalny obiekt ma odniesienia do innych obiektów jako pola, wówczas kopia tych obiektów zostanie również utworzona przez wywołanie metody clone (). To sprawia, że sklonowany obiekt jest niezależny od oryginalnego obiektu, a wszelkie zmiany wprowadzone w którymkolwiek z obiektów nie będą odzwierciedlane na drugim.
co to jest java ide
Poniżej podałem przykład tego samego:
pakiet edureka class EduCourse implementuje Cloneable {String course1 String course2 String course3 public EduCourse (String crs1, String crs2, String crs3) {this.course1 = crs1 this.course2 = crs2 this.course3 = crs3} protected Object clone () rzuca CloneNot {SupportedException return super.clone ()}} class EduLearner implementuje Cloneable {int eduId String learnerName EduCourse eduCourse public EduLearner (int eduId, String learnerName, EduCourse eduCourse) {this.eduId = eduId this.learnerName = eduCourse} Zastępowanie metody clone () w celu utworzenia głębokiej kopii chronionego obiektu Object clone () zgłasza CloneNotSupportedException {EduLearner learner = (EduLearner) super.clone () learner.eduCourse = (EduCourse) eduCourse.clone () return learner}} klasa publiczna DeepCloneSample {public static void main (String [] args) {EduCourse j2ee = new EduCourse ('Java', 'Spring', 'Microservices') EduLearner learner1 = new EduLearner (2811, 'Max', j2ee) EduLearner uczyć się er2 = null try {// Tworzenie klonu learner1 i przypisywanie go do learner2 learner2 = (EduLearner) learner1.clone ()} catch (CloneNotSupportedException e) {e.printStackTrace ()} // Drukowanie szczegółów Learner1 System.out. println ('Szczegóły ucznia 2:') System.out.println ('Id:' + learner1.eduId) System.out.println ('Name:' + learner1.learnerName) System.out.println ('Identyfikator kursu: '+ learner1.eduCourse) // Drukowanie wszystkich kursów' learner1 'System.out.println (' Courses of Learner 1: ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1. eduCourse.course2) System.out.println (learner1.eduCourse.course3) // Drukowanie szczegółów Learner2 System.out.println ('Details of Learner 2:') System.out.println ('Id:' + learner2.eduId ) System.out.println ('Name:' + learner2.learnerName) System.out.println ('Course Id:' + learner2.eduCourse) // Drukowanie wszystkich kursów 'learner2' System.out.println ('Kursy ucznia 2: ') System.out.println (learner2.eduCourse.course1) System.out.printl n (learner2.eduCourse.course2) System.out.println (learner2.eduCourse.course3) // Zmiana kursu3 z 'learner2' learner2.eduCourse.course3 = 'JSP' // Ta zmiana nie zostanie odzwierciedlona w oryginale ' learner1 'System.out.println (' Kursy ucznia 1: ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1.eduCourse.course2) System.out.println (learner1.eduCourse. course3) // Zaktualizowane kursy learner2 System.out.println ('Courses of Learner 2:') System.out.println (learner2.eduCourse.course1) System.out.println (learner2.eduCourse.course2) System.out. println (learner2.eduCourse.course3)}}
Wynik:
Szczegóły ucznia 2: Id: 2811 Nazwa: Maksymalny identyfikator kursu: edureka.EduCourse@15db9742 Kursy ucznia 1: mikrousługi Java Spring Szczegóły ucznia 2: Id: 2811 Nazwa: Maksymalny identyfikator kursu: edureka.EduCourse@6d06d69c Kursy ucznia 2 : Kursy Java Spring dotyczące mikrousług dla ucznia 1: Kursy Java Spring dotyczące mikrousług dla ucznia 2: Java Spring JSP
To prowadzi nas do końca tego artykułu o klonowaniu w Javie. Jeśli chcesz dowiedzieć się więcej o Javie, możesz skorzystać z naszego .
Teraz, gdy zrozumiałeś, czym jest klonowanie w Javie, zapoznaj się z autorstwa Edureka, zaufanej firmy zajmującej się edukacją online, z siecią ponad 250 000 zadowolonych uczniów rozsianych po całym świecie. Szkolenie i certyfikacja J2EE i SOA firmy Edureka jest przeznaczony dla studentów i profesjonalistów, którzy chcą zostać programistą Java. Kurs ma na celu zapewnienie przewagi w programowaniu w języku Java i przeszkolenie zarówno podstawowych, jak i zaawansowanych koncepcji języka Java, a także różnych struktur Java, takich jak Hibernate i Spring.
Masz do nas pytanie? Wspomnij o tym w sekcji komentarzy w tym artykule „Klonowanie w Javie”, a my skontaktujemy się z Tobą tak szybko, jak to możliwe.