Метод Java Object clone () создает неглубокую копию объекта.
Здесь мелкая копия означает, что она создает новый объект и копирует все поля и методы, связанные с объектом.
Синтаксис clone()метода:
object.clone()
clone () Параметры
clone()Метод не принимает никаких параметров.
clone () Возвращаемые значения
- возвращает копию объекта
- выбрасывает,
CloneNotSupportedExceptionесли класс объекта не реализуетCloneableинтерфейс
Примечание : Objectкласс не реализует Cloneable. Следовательно, мы не можем вызвать clone()метод для объекта Objectкласса.
Пример 1: Java clone ()
class Main implements Cloneable ( // declare variables String name; int version; public static void main(String() args) ( // create an object of Main class Main obj1 = new Main(); // initialize name and version using obj1 obj1.name = "Java"; obj1.version = 14; // print variable System.out.println(obj1.name); // Java System.out.println(obj1.version); // 14 try ( // create clone of obj1 Main obj2 = (Main)obj1.clone(); // print the variables using obj2 System.out.println(obj2.name); // Java System.out.println(obj2.version); // 14 ) catch (Exception e) ( System.out.println(e); ) ) )
В приведенном выше примере мы создали класс с именем Main. Класс включает два поля: имя и версия. Здесь мы инициализировали поля класса, используя объект класса obj1.
Обратите внимание на линию,
Main obj2 = (Main)obj1.clone();
Здесь мы использовали этот clone()метод для создания копии obj1. Возвращаемое значение clone()присваивается объекту obj2. Поскольку возвращаемое значение clone()is Objecttype, мы использовали его (Main)для преобразования в тип Main.
Теперь к имени и версии полей можно получить доступ с помощью объекта obj2. Однако, если мы изменим значение полей с помощью obj2, значение, связанное с obj1, не изменится.
Пример 2: изменение значения с помощью клонированного объекта
class Main implements Cloneable ( // declare variables String name; int version; public static void main(String() args) ( // create an object of Main class Main obj1 = new Main(); // initialize name and version using obj1 obj1.name = "Java"; obj1.version = 14; // print variable System.out.println(obj1.name); // Java System.out.println(obj1.version); // 14 try ( // create a clone of obj1 Main obj2 = (Main)obj1.clone(); // print the variables using obj2 System.out.println(obj2.name); // Java System.out.println(obj2.version); // 14 // changing value of name // using obj2 obj2.name = "Python"; System.out.println(obj2.name); // Python // check if value associated // with obj1 is changed System.out.println(obj1.name); // Java ) catch (Exception e) ( System.out.println(e); ) ) )
Обратите внимание на линию,
obj2.name = "Python";
Здесь мы изменили значение переменной с помощью obj2. Теперь, когда мы печатаем имя переменной для obj1 и obj2, мы видим, что значение для obj1 не изменилось. Это потому, что clone()метод делает мелкую копию объектов.
Чтобы узнать больше о мелком копировании, посетите Что такое мелкое копирование в Java?
Мы заключили clone()метод в блок Java try… catch. Это потому, что подкласс может вызвать исключение, если объект не может быть клонирован.
Примечание . ObjectКласс является суперклассом для всех классов в Java. Следовательно, каждый класс и массивы могут реализовать clone()метод.








