1 защищенный нативный объект клон () бросает ClonenotSupportedException;
1. Метод изменен собственными ключевыми словами
Нативное ключевое слово в Java указывает, что этот метод является локальным методом, [Нативное описание Java]. Более того, эффективность выполнения нативных методов модификации выше, чем у не нативных модификаций.
2. Метод изменен защищенным
Когда класс переопределяет метод Clone (), его необходимо изменить в модификатор общественного доступа, чтобы гарантировать, что все другие классы могут получить доступ к этому методу этого класса.
3. Метод бросает clonenotsupportedException исключение
Если класс хочет переопределить метод Clone (), он должен реализовать сам интерфейс Java.lang.lang.lang.lang .
2. Роль клона ()
Примечание. Объекты здесь специально относятся к сложным типам.
1. Простая = операция
Мы знаем, что объекты сложных типов в Java - все это ссылочные типы, и они часто хранят адреса памяти объектов. Поэтому мы не можем просто назначить операцию значения как оператор = . Мы назначаем объект A другому объекту B, и мы просто присваиваем адрес памяти объекта A к B, чтобы оба они указывали на один и тот же адрес памяти. Следствием этого является то, что модификации одного из объектов будут влиять на другой объект. На следующем рисунке показано:
Человек P1 = новый человек (); человек P2 = P1;
2. Клон ()
Используя метод Clone (), вы можете быстро создать копию объекта, и два объекта указывают на разные адреса памяти. На следующем рисунке показано:
Человек p1 = новый человек (); человек p2 = p1.clone ();
3. мелкий клон и глубокий клон1, мелкий клон (мелкая копия)
Мелкий клон относится к полям в самом объекте клонов, а не к объекту клона. Только вызов super.clone (), просто мелкий клон. Хотя скопированный объект указывает на разные адреса памяти, поля в объекте по -прежнему указывают на тот же адрес памяти, что и предыдущий объект.
открытый класс неглубокий клон реализует клонируемые {public String name; Public Int Age; общественное лицо; public shallowclone () {} public mallowclone (String name, int Age, Person Person) {this.name = name; this.age = возраст; this.person = человек; } @Override public mallowclone Clone () {неглубокий клон c = null; try {c = (fallowclone) super.clone (); возврат C; } catch (clonenotsupportedException e) {e.printstacktrace (); } return c; } public static void main (string [] args) {person p = new Person (); p.name = "p"; P.age = 10; Мелкий клон C1 = новый мелкий клон ("Джим", 18, P); System.out.printf («До клона: C1 = %s, c1.person = %s/n», C1, c1.person); Мелковод C2 = c1.clone (); System.out.printf («После клона: c2 = %s, c2.person = %s/n», c2, c2.person); }}Run main () вывод:
Перед клоном: c1 = cre.sample.test.object.shallyclone@558385e3, c1.person = cre.sample.test.person@2dcb25f1after clone: c2 = cre.sample.sampject.shallowclone@742808b3, c2.sperson = cresm.
Таким образом, адрес памяти объекта мелкого клона изменился, но адрес памяти поля личности в объекте не изменился;
2. Глубокий клон (глубокая копия)
Глубокий клон относится к полям в самом объекте клонов, а также к объекту клона.
/*** Пример кода глубокого клона* Создан Cregu на 2016/6/6/9. */public Class DeepClone реализует клонируемые {public String name; Public Int Age; общественное лицо; public deepClone () {} public deepClone (string name, int возраст, личность) {this.name = name; this.age = возраст; this.person = человек; } @Override public deepClone Clone () {deepClone c = null; try {c = (deepClone) super.clone (); C.person = person.clone (); возврат C; } catch (clonenotsupportedException e) {e.printstacktrace (); } return c; } public static void main (string [] args) {person p = new Person (); p.name = "p"; P.age = 10; DeepClone C1 = новый DeepClone ("Jim", 18, p); System.out.printf («До клона: C1 = %s, c1.person = %s/n», C1, c1.person); DeepClone C2 = c1.clone (); System.out.printf («После клона: c2 = %s, c2.person = %s/n», c2, c2.person); }}Run main () вывод:
Перед клоном: c1 = cre.sample.test.object.deepclone@558385e3, c1.person = cre.sample.test.person@2dcb25f1after clone: c2 = cre.sample.sampject.deepclone@742808b3, c2.person = creasm.sampe.sampe.sample.peest.peepclone@742808b3, c2.person.
В этом случае адрес памяти объекта DeepClone изменился, но адрес памяти поля человека в объекте также изменился.
Вышеупомянутый всесторонний анализ метода клонов объекта Java - это весь контент, которым я делюсь с вами. Я надеюсь, что вы можете дать вам ссылку, и я надеюсь, что вы сможете поддержать Wulin.com больше.