最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文盤點(diǎn)Java創(chuàng)建實(shí)例對象的方式

 更新時(shí)間:2025年02月10日 08:23:41   作者:chasdream  
Java對象是通過加載、鏈接、初始化三大步驟來完成對象的創(chuàng)建及初始化,那么接下來就說一下Java創(chuàng)建實(shí)例對象的方式有哪幾種,文中并通過代碼示例講解的非常詳細(xì),需要的朋友可以參考下

Java對象是通過加載、鏈接、初始化三大步驟來完成對象的創(chuàng)建及初始化。那么接下來就說一下Java創(chuàng)建實(shí)例對象的方式有哪幾種。其中,new對象、靜態(tài)工廠方法和反射機(jī)制三種方式是需要通過調(diào)用類的構(gòu)造方法進(jìn)行對象的實(shí)例化,通過反序列化和clone()方法的方式是不需要調(diào)用構(gòu)造方法進(jìn)行對象的實(shí)例化。

1.通過new方式創(chuàng)建對象,例如:Shape shape = new Shape(); 該種方式是工作中最為常見的一種實(shí)例化方式。

2.通過靜態(tài)工廠方法創(chuàng)建實(shí)例對象,例如:Integer.valueOf(1); 其實(shí)質(zhì)也是通過new的方式調(diào)用構(gòu)造方法來創(chuàng)建實(shí)例對象。

3.通過反射機(jī)制創(chuàng)建實(shí)例對象,通過java.lang.Class或java.lang.reflect.Constructor的newInstance()方法來創(chuàng)建實(shí)例對象,newInstance()方法創(chuàng)建實(shí)例對象的類必須含有無參構(gòu)造方法。

  • 通過Class.forName(“”).newInstance()或T.class.newInstance()創(chuàng)建實(shí)例對象;
public static void test() {
    try {
        Class clazz = Class.forName("bean.User");
        //或 Class clazz = User.class;
        User user = (User) clazz.newInstance();
    } catch (InstantiationException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
}
  • 通過Constructor.newInstance()創(chuàng)建實(shí)例對象;
public static void test() {
    try {
        Constructor<User> con = User.class.getConstructor();
        User user = con.newInstance();
    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (InstantiationException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    }
}

4.通過反序列化方式創(chuàng)建實(shí)例對象。通過I/O技術(shù)的反序列化方式創(chuàng)建實(shí)例對象的類必須實(shí)現(xiàn)java.io.Serializable接口。ObjectOutputStream可以通過網(wǎng)絡(luò)或本地獲取已序列化對象的二進(jìn)制字節(jié)碼進(jìn)行反序列化來創(chuàng)建該實(shí)例對象。通過反序列化方式創(chuàng)建實(shí)例對象不需要調(diào)用構(gòu)造方法。

  • 創(chuàng)建User類并實(shí)現(xiàn)Serializable接口
/**
 * 創(chuàng)建User類并實(shí)現(xiàn)Serializable接口
 */
public class User implements Serializable {
    private String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
/**
 * 通過ObjectOutputStream將對象序列化字節(jié)流持久化到本地硬盤
 */
public static void serialization() {
    try {
        User user = new User();
        ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(new File("/Users/xxx/Desktop/User.txt")));
        out.writeObject(user);
        out.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

/**
 * 通過ObjectInputStream從本地硬盤中獲取對象字節(jié)流反序列化并創(chuàng)建實(shí)例對象
 */
public static void deserialization() {
    try {
        ObjectInputStream in = new ObjectInputStream(new FileInputStream(new File("/Users/xxx/Desktop/User.txt")));
        User user = (User) in.readObject();
        in.close();
        user.setName("serializable");
        System.out.println(user.getName());
    } catch (IOException e) {
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
}

5.通過調(diào)用對象的clone()方法創(chuàng)建實(shí)例對象。通過clone()方法創(chuàng)建實(shí)例對象需要實(shí)現(xiàn)java.lang.Cloneable接口并且可以通過復(fù)寫Object類的clone()方法來實(shí)現(xiàn)對象的深拷貝。調(diào)用clone()方法時(shí)JVM先為新創(chuàng)建的對象分配內(nèi)存,然后將調(diào)用clone()方法的對象復(fù)制給新創(chuàng)建的對象。通過clone()方法創(chuàng)建實(shí)例對象不需要調(diào)用構(gòu)造方法。

  • 創(chuàng)建User類并實(shí)現(xiàn)Cloneable接口,并重寫Object類的clone()方法
/**
 * 創(chuàng)建User類并實(shí)現(xiàn)Cloneable接口,并重寫Object類的clone()方法
 */
public class User implements Cloneable {
    private String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}
  • 通過clone()方法創(chuàng)建新的User實(shí)例對象
public static void main(String[] args) {
    try {
        User cloneUser = new User();
        User copyUser = (User) cloneUser.clone();
        copyUser.setName("lisi");
        System.out.println(copyUser.getName());
    } catch (CloneNotSupportedException e) {
        e.printStackTrace();
    }
}

寫在最后

到此這篇關(guān)于一文盤點(diǎn)Java創(chuàng)建實(shí)例對象的方式的文章就介紹到這了,更多相關(guān)Java創(chuàng)建實(shí)例對象內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java線程池工作隊(duì)列飽和策略代碼示例

    java線程池工作隊(duì)列飽和策略代碼示例

    這篇文章主要介紹了java線程池工作隊(duì)列飽和策略代碼示例,涉及線程池的簡單介紹,工作隊(duì)列飽和策略的分析及代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • SpringMVC文件上傳功能實(shí)例解析

    SpringMVC文件上傳功能實(shí)例解析

    這篇文章主要介紹了SpringMVC文件上傳功能實(shí)例解析,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-03-03
  • Java實(shí)現(xiàn)接口限流方案

    Java實(shí)現(xiàn)接口限流方案

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)接口限流方案,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Spring?Boot異步線程間數(shù)據(jù)傳遞的四種方式

    Spring?Boot異步線程間數(shù)據(jù)傳遞的四種方式

    這篇文章主要為大家介紹了Spring?Boot異步線程間數(shù)據(jù)傳遞的四種方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • linux下idea、pycharm等輸入中文拼音時(shí)滿3個(gè)字母后無法繼續(xù)拼音輸入的問題

    linux下idea、pycharm等輸入中文拼音時(shí)滿3個(gè)字母后無法繼續(xù)拼音輸入的問題

    這篇文章主要介紹了linux下idea、pycharm等輸入中文拼音時(shí)滿3個(gè)字母后無法繼續(xù)拼音輸入的問題,本文通過圖文并茂的形式給大家分享解決方法,需要的朋友可以參考下
    2021-04-04
  • Java用自定義的類作為HashMap的key值實(shí)例

    Java用自定義的類作為HashMap的key值實(shí)例

    下面小編就為大家?guī)硪黄狫ava用自定義的類作為HashMap的key值實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-12-12
  • Spring Boot 事務(wù)實(shí)戰(zhàn)之如何解決 DB 與 MQ 的"雙寫不一致"問題

    Spring Boot 事務(wù)實(shí)戰(zhàn)之如何解決 DB 與 MQ 

    本文結(jié)合代碼案例探討如何利用Spring的 TransactionSynchronizationManager 實(shí)現(xiàn)事務(wù)提交后觸發(fā)(Trigger After Commit)機(jī)制,優(yōu)雅解決數(shù)據(jù)庫與消息隊(duì)列的"雙寫一致性"問題,感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • SpringBoot各種參數(shù)校驗(yàn)的實(shí)例教程

    SpringBoot各種參數(shù)校驗(yàn)的實(shí)例教程

    經(jīng)常需要提供接口與用戶交互(獲取數(shù)據(jù)、上傳數(shù)據(jù)等),由于這個(gè)過程需要用戶進(jìn)行相關(guān)的操作,為了避免出現(xiàn)一些錯(cuò)誤的數(shù)據(jù)等,一般需要對數(shù)據(jù)進(jìn)行校驗(yàn),下面這篇文章主要給大家介紹了關(guān)于SpringBoot各種參數(shù)校驗(yàn)的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • Java?toString方法使用超全講解

    Java?toString方法使用超全講解

    在Java中所有的類都有一個(gè)共同的父類Object(默認(rèn)繼承,不用加extends關(guān)鍵字),toString方法就是Object類的一個(gè)方法,用來返回該對象的字符串表示形式,下面這篇文章主要給大家介紹了關(guān)于Java?toString方法使用的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • Java實(shí)現(xiàn)24點(diǎn)小游戲

    Java實(shí)現(xiàn)24點(diǎn)小游戲

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)24點(diǎn)小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01

最新評論

望都县| 阳山县| 正镶白旗| 苍南县| 富民县| 穆棱市| 新平| 新营市| 阳春市| 辉县市| 辽中县| 迁安市| 长治市| 平果县| 聂荣县| 松溪县| 临漳县| 志丹县| 鄂州市| 永和县| 周宁县| 曲麻莱县| 安宁市| 新沂市| 利辛县| 镇平县| 海丰县| 江安县| 盐城市| 铁岭县| 尼木县| 灵寿县| 荆门市| 敖汉旗| 枣庄市| 余庆县| 鸡西市| 汾西县| 庄河市| 奇台县| 汽车|