一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

【第33題】JAVA高級(jí)技術(shù)-對(duì)象克隆2(淺克?。?/span>

 小虛竹 2022-04-22

文章目錄

零、前言

? 今天是學(xué)習(xí) JAVA語(yǔ)言 打卡的第33天,每天我會(huì)提供一篇文章供群成員閱讀( 不需要訂閱付錢(qián) ),讀完文章之后,按解題思路,自己再實(shí)現(xiàn)一遍。在小虛竹JAVA社區(qū) 中對(duì)應(yīng)的 【打卡貼】打卡,今天的任務(wù)就算完成了。

? 因?yàn)榇蠹叶荚谝黄饘W(xué)習(xí)同一篇文章,所以有什么問(wèn)題都可以在群里問(wèn),群里的小伙伴可以迅速地幫到你,一個(gè)人可以走得很快,一群人可以走得很遠(yuǎn),有一起學(xué)習(xí)交流的戰(zhàn)友,是多么幸運(yùn)的事情。

? 學(xué)完后,自己寫(xiě)篇學(xué)習(xí)報(bào)告的博客,可以發(fā)布到小虛竹JAVA社區(qū) ,供學(xué)弟學(xué)妹們參考。

? 我的學(xué)習(xí)策略很簡(jiǎn)單,題海策略+ 費(fèi)曼學(xué)習(xí)法。如果能把這100題都認(rèn)認(rèn)真真自己實(shí)現(xiàn)一遍,那意味著 JAVA語(yǔ)言 已經(jīng)筑基成功了。后面的進(jìn)階學(xué)習(xí),可以繼續(xù)跟著我,一起走向架構(gòu)師之路。

一、題目描述

題目:對(duì)象的克隆是Java一項(xiàng)高級(jí)技術(shù),可以根據(jù)給定的對(duì)象,獲得與其完全相同的另一個(gè)對(duì)象。

在克隆對(duì)象時(shí),如果對(duì)象的成員變量是基本類(lèi)型時(shí),使用淺克隆就能完成。

如果對(duì)象的成員變量包含可變引用類(lèi)型,則需要使用深克隆技術(shù)。

如果引用類(lèi)型是不可變的,如String類(lèi)的對(duì)象,則不必進(jìn)行深克隆。

二、解題思路-淺克隆

創(chuàng)建一個(gè)地址類(lèi)Address

定義三個(gè)成員變量表示:國(guó)家,省和市。

使用構(gòu)造方法對(duì)它們進(jìn)行賦值。

并提供對(duì)應(yīng)的get方法和set方法。

重寫(xiě)toString()方法,來(lái)輸出對(duì)象。

再創(chuàng)建一個(gè)員工類(lèi)Employee

定義兩個(gè)成員變量表示:員工名字,年齡和地址

使用構(gòu)造方法對(duì)它們進(jìn)行賦值。

并提供對(duì)應(yīng)的get方法和set方法。

重寫(xiě)toString()方法和clone方法。

三、代碼詳解

地址類(lèi):

public class Address {
    private String state; // 表示員工所在的國(guó)家
    private String province;// 表示員工所在的省
    private String city; // 表示員工所在的市

    public Address(String state, String province, String city) {// 利用構(gòu)造方法進(jìn)行初始化
        this.state = state;
        this.province = province;
        this.city = city;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    public String getProvince() {
        return province;
    }

    public void setProvince(String province) {
        this.province = province;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    @Override
    public String toString() {// 重寫(xiě)toString()方法
        StringBuilder sb = new StringBuilder();
        sb.append("國(guó)家:" + state + ", ");
        sb.append("省:" + province + ", ");
        sb.append("市:" + city);
        return sb.toString();
    }
}

員工類(lèi):

public class Employee implements Cloneable {
    private String name; // 表示員工的姓名
    private int age; // 表示員工的年齡
    private Address address;// 表示員工的地址

    public Employee(String name, int age, Address address) {// 利用構(gòu)造方法進(jìn)行初始化
        this.name = name;
        this.age = age;
        this.address = address;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    @Override
    public String toString() {// 重寫(xiě)toString()方法
        StringBuilder sb = new StringBuilder();
        sb.append("姓名:" + name + ", ");
        sb.append("年齡:" + age + "\n");
        sb.append("地址:" + address);
        return sb.toString();
    }

    @Override
    public Employee clone() {// 實(shí)現(xiàn)淺克隆
        Employee employee = null;
        try {
            employee = (Employee) super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return employee;
    }
}

測(cè)試類(lèi)

public class Test {
    public static void main(String[] args) {
        System.out.println("克隆之前:");
        Address address = new Address("中國(guó)", "吉林", "長(zhǎng)春");// 創(chuàng)建address對(duì)象
        Employee employee1 = new Employee("小虛竹", 30, address);// 創(chuàng)建employee1對(duì)象
        System.out.println("員工1的信息:");
        System.out.println(employee1);// 輸出employee1對(duì)象
        System.out.println("克隆之后:");
        Employee employee2 = employee1.clone();// 使用克隆創(chuàng)建employee2對(duì)象
        employee2.getAddress().setState("中國(guó)"); // 修改員工地址
        employee2.getAddress().setProvince("四川"); // 修改員工地址
        employee2.getAddress().setCity("成都"); // 修改員工地址
        employee2.setName("大虛竹"); // 修改員工名字
        employee2.setAge(24);// 修改員工年齡
        System.out.println("員工1的信息:");
        System.out.println(employee1);// 輸出employee1對(duì)象
        System.out.println("員工2的信息:");
        System.out.println(employee2);// 輸出employee2對(duì)象
    }

}

如圖

多學(xué)一個(gè)知識(shí)點(diǎn):

clone方法是一個(gè)受保護(hù)的方法,需要重寫(xiě)clone方法并將clone方法的訪(fǎng)問(wèn)權(quán)限改為public。

提供克隆功能的類(lèi),需要實(shí)現(xiàn)Cloneable接口,不然使用clone方法時(shí),會(huì)有異常。

java.lang.CloneNotSupportedException: com.xiaoxuzhu.Employee

如圖

四、推薦專(zhuān)欄

《JAVA從零到壹》

《JAVA從零到壹》第四講:類(lèi)與對(duì)象基礎(chǔ)

第六講:數(shù)組包及訪(fǎng)問(wèn)控制

《JAVA從零到壹》第七講:面向?qū)ο蟾呒?jí)特性

五、示例源碼下載

關(guān)注下面的公眾號(hào),回復(fù)筑基+題目號(hào)

筑基33

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多

    在线观看视频日韩成人| 欧美黑人暴力猛交精品| 草草视频精品在线观看| 91欧美亚洲视频在线| 高清一区二区三区四区五区 | 国产亚洲精品岁国产微拍精品| 99久久成人精品国产免费| 欧美国产亚洲一区二区三区| 91欧美日韩精品在线| 国产内射一级二级三级| 91精品国产综合久久福利| 国产精品丝袜美腿一区二区| 九九热最新视频免费观看| 免费观看一级欧美大片| 欧美国产日产综合精品| 精品亚洲一区二区三区w竹菊| 日韩一区二区三区嘿嘿| 人妻露脸一区二区三区| 亚洲av在线视频一区| 欧美日韩精品人妻二区三区| 夫妻激情视频一区二区三区 | 91亚洲国产日韩在线| 在线免费看国产精品黄片| 人人妻在人人看人人澡| 老熟妇2久久国内精品| 午夜福利网午夜福利网| 内射精子视频欧美一区二区| 国产日韩欧美在线亚洲| 久久中文字幕中文字幕中文| 欧美国产日产综合精品| 99久久免费看国产精品| 成人午夜激情在线免费观看| 欧美日韩精品综合在线| 99日韩在线视频精品免费| 精品视频一区二区三区不卡| 邻居人妻人公侵犯人妻视频| 国产精品久久三级精品| 好吊妞视频只有这里有精品| 国产成人精品99在线观看| 久久这里只精品免费福利| 不卡中文字幕在线免费看|