Rumah >Java >javaTutorial >Cara menggunakan salinan dalam Java, salinan cetek dan antara muka Boleh Diklon

Cara menggunakan salinan dalam Java, salinan cetek dan antara muka Boleh Diklon

PHPz
PHPzke hadapan
2023-04-28 20:31:051342semak imbas

1. Pengenalan kepada antara muka Boleh Diklon

Boleh Diklon ialah antara muka yang ditandakan (antara muka kosong). Kaedah Object.clone() boleh digunakan. Jika objek kelas yang tidak melaksanakan Cloneable calls clone(), CloneNotSupportedException akan dilemparkan.

Cara menggunakan salinan dalam Java, salinan cetek dan antara muka Boleh Diklon Boleh difahami bahawa antara muka Boleh Diklon memainkan fungsi penandaan memerlukan pengguna menandai kelas mana yang boleh diklonkan menambah antara muka Boleh Diklon, ini menunjukkan bahawa objek yang dicipta oleh kelas ini boleh diklon.

Jika anda mahu kelas mempunyai fungsi menyalin kejadian, selain melaksanakan antara muka Boleh Diklon, anda juga mesti mengatasi kaedah klon() kelas Objek.

Cara menggunakan salinan dalam Java, salinan cetek dan antara muka Boleh DiklonAnda boleh melihat bahawa kaedah klon() kelas Objek diubah suai dengan dilindungi, jadi anda perlu memanggil kelas Objek melalui kata kunci super dalam klon yang diganti ( ) kaedah Kaedah klon() dalam

Cara menggunakan salinan dalam Java, salinan cetek dan antara muka Boleh Diklon2 Pengenalan dan contoh salinan cetek

Apabila menyalin objek, pembolehubah ahli data asas objek. jenis adalah Penyalinan dilakukan, tetapi hanya rujukan dihantar kepada pembolehubah ahli jenis rujukan, dan objek baharu tidak dibuat

Apabila kandungan jenis rujukan diubah suai, ia akan menjejaskan objek yang disalin. Ringkasnya:

Salinan cetek hanya menyalin objek yang disalin, bukan objek yang dirujuk. Perhatikan kod berikut, gunakan contoh kelas Wang sebagai medan kelas Orang, buat objek baharu kelas Orang, orang1, dan salin objek orang1 kepada orang2 ini adalah salinan cetek, hanya salin rujukan wang objek orang1 kepada orang2, dan momey secara peribadi1 dan orang2 menunjuk ke objek yang sama.

class Money {
    public double m = 666;
}
class Person implements Cloneable{
    int id;
    public Money money = new Money();

    public Person(int id) {
        this.id = id;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", money=" + money.m +
                '}';
    }
}
public class TestDemo3 {
    public static void main(String[] args) throws CloneNotSupportedException {
        Person person1 = new Person(1);
        Person person2 = (Person) person1.clone();

        System.out.println("通过person2修改前的结果");
        System.out.println(person1);
        System.out.println(person2);

        person2.money.m = 888;
        person2.id = 2;
        System.out.println("通过person2修改后的结果");
        System.out.println(person1);
        System.out.println(person2);
    }
}

Hasil pelaksanaan:

Ilustrasi salinan cetek: Cara menggunakan salinan dalam Java, salinan cetek dan antara muka Boleh Diklon

3. Pengenalan kepada salinan dalam Dan contoh Cara menggunakan salinan dalam Java, salinan cetek dan antara muka Boleh Diklon

Apabila menyalin objek, selain menyalin pembolehubah ahli jenis data asas, apabila menyalin pembolehubah ahli jenis rujukan, objek baharu dicipta untuk menyimpan pembolehubah ahli jenis rujukan . Ringkasnya:

Salinan dalam menyalin semua objek yang dirujuk oleh objek yang akan disalin.

Kod berikut melaksanakan salinan dalam; untuk melaksanakan salinan mendalam objek person1, mula-mula gunakan rujukan Person tmp untuk menyimpan hasil salinan cetek, cari objek wang melalui rujukan tmp, dan kemudian salin wang itu object , kemudian berikannya kepada wang dalam tmp, dan akhirnya kembalikan tmp. Dengan cara ini, objek yang dirujuk oleh wang juga disalin, menyedari salinan yang mendalam Pada masa ini, momey secara peribadi1 dan orang2 menunjuk kepada dua objek berbeza.

class Money implements Cloneable{
    public double m = 666;

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }

}

class Person implements Cloneable{
    public int id;
    public Money money = new Money();

    public Person(int id) {
        this.id = id;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        //return super.clone();
        Person tmp = (Person) super.clone();
        tmp.money = (Money) this.money.clone();
        return tmp;
    }

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", money=" + money.m +
                '}';
    }
}
public class Test2 {
    public static void main(String[] args) throws CloneNotSupportedException{
        Person person1 = new Person(1);
        Person person2 = (Person) person1.clone();

        System.out.println("通过person2修改前的结果");
        System.out.println(person1);
        System.out.println(person2);

        person2.money.m = 888;
        person2.id = 2;
        System.out.println("通过person2修改后的结果");
        System.out.println(person1);
        System.out.println(person2);
    }
}

Hasil pelaksanaan:

Ilustrasi salinan dalam: Cara menggunakan salinan dalam Java, salinan cetek dan antara muka Boleh Diklon

4 Cara menggunakan salinan dalam Java, salinan cetek dan antara muka Boleh Diklon

Kaedah klon dalam Java ialah salinan cetek, dan jenis rujukan masih melepasi rujukan. Kita boleh melaksanakan salinan dalam dengan terus memanggil kaedah klon() dan melaksanakan kaedah klon() sekali lagi pada pembolehubah jenis rujukan objek.

Atas ialah kandungan terperinci Cara menggunakan salinan dalam Java, salinan cetek dan antara muka Boleh Diklon. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam