Java Nesnesi klonu ()

Java Object clone () yöntemi, nesnenin basit bir kopyasını oluşturur.

Burada, yüzeysel kopya, yeni bir nesne oluşturduğu ve nesneyle ilişkili tüm alanları ve yöntemleri kopyaladığı anlamına gelir.

clone()Yöntemin sözdizimi şöyledir:

 object.clone()

clone () Parametreler

clone()Yöntemin bir parametre almaz.

clone () Dönüş Değerleri

  • nesnenin kopyasını döndürür
  • CloneNotSupportedExceptionnesnenin sınıfı Cloneablearabirimi uygulamazsa atar

Not : ObjectSınıf uygulanmaz Cloneable. Bu nedenle, sınıfın clone()nesnesinin yöntemini çağıramayız Object.

Örnek 1: Java klonu ()

 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); ) ) )

Yukarıdaki örnekte Main adında bir sınıf oluşturduk. Sınıf, iki alan adı ve sürümü içerir. Burada, sınıfın obj1 nesnesini kullanarak sınıf alanlarını başlattık.

Çizgiye dikkat edin,

 Main obj2 = (Main)obj1.clone();

Burada clone()obj1 kopyasını oluşturmak için yöntemi kullandık . Tarafından döndürülen değer clone()obj2 nesnesine atanır. Dönüş değeri yana clone()olan Objecttip, biz kullandık (Main)Ana tip haline dönüştürmek için.

Artık alan adı ve sürümüne obj2 nesnesi kullanılarak erişilebilir. Ancak, obj2 kullanarak alanların değerini değiştirirsek, obj1 ile ilişkili değer değişmeyecektir.

Örnek 2: Klonlanmış nesneyi kullanarak değeri değiştirme

 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); ) ) )

Çizgiye dikkat edin,

 obj2.name = "Python";

Burada obj2 kullanarak değişkenin değerini değiştirdik. Şimdi hem obj1 hem de obj2 için değişken adını yazdırdığımızda, obj1 değerinin değişmediğini görebiliriz. Bunun nedeni, clone()yöntemin nesnelerin sığ kopyasını yapmasıdır.

Yüzeysel kopyalama hakkında daha fazla bilgi edinmek için Java'da Sığ Kopya Nedir?

Biz ekte clone()Java … catch deneyin blok içine yöntemi. Bunun nedeni, nesne klonlanamıyorsa alt sınıfın istisna atabilmesidir.

Not : ObjectSınıf, Java'daki tüm sınıflar için üst sınıftır. Dolayısıyla, her sınıf ve dizi clone()yöntemi uygulayabilir .

Ilginç makaleler...