欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

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

  • 通過(guò)Class.forName(“”).newInstance()或T.class.newInstance()創(chuàng)建實(shí)例對(duì)象;
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();
    }
}
  • 通過(guò)Constructor.newInstance()創(chuàng)建實(shí)例對(duì)象;
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.通過(guò)反序列化方式創(chuàng)建實(shí)例對(duì)象。通過(guò)I/O技術(shù)的反序列化方式創(chuàng)建實(shí)例對(duì)象的類(lèi)必須實(shí)現(xiàn)java.io.Serializable接口。ObjectOutputStream可以通過(guò)網(wǎng)絡(luò)或本地獲取已序列化對(duì)象的二進(jìn)制字節(jié)碼進(jìn)行反序列化來(lái)創(chuàng)建該實(shí)例對(duì)象。通過(guò)反序列化方式創(chuàng)建實(shí)例對(duì)象不需要調(diào)用構(gòu)造方法。

  • 創(chuàng)建User類(lèi)并實(shí)現(xiàn)Serializable接口
/**
 * 創(chuàng)建User類(lèi)并實(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;
    }
}
/**
 * 通過(guò)ObjectOutputStream將對(duì)象序列化字節(jié)流持久化到本地硬盤(pán)
 */
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();
    }
}

/**
 * 通過(guò)ObjectInputStream從本地硬盤(pán)中獲取對(duì)象字節(jié)流反序列化并創(chuàng)建實(shí)例對(duì)象
 */
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.通過(guò)調(diào)用對(duì)象的clone()方法創(chuàng)建實(shí)例對(duì)象。通過(guò)clone()方法創(chuàng)建實(shí)例對(duì)象需要實(shí)現(xiàn)java.lang.Cloneable接口并且可以通過(guò)復(fù)寫(xiě)Object類(lèi)的clone()方法來(lái)實(shí)現(xiàn)對(duì)象的深拷貝。調(diào)用clone()方法時(shí)JVM先為新創(chuàng)建的對(duì)象分配內(nèi)存,然后將調(diào)用clone()方法的對(duì)象復(fù)制給新創(chuàng)建的對(duì)象。通過(guò)clone()方法創(chuàng)建實(shí)例對(duì)象不需要調(diào)用構(gòu)造方法。

  • 創(chuàng)建User類(lèi)并實(shí)現(xiàn)Cloneable接口,并重寫(xiě)Object類(lèi)的clone()方法
/**
 * 創(chuàng)建User類(lèi)并實(shí)現(xiàn)Cloneable接口,并重寫(xiě)Object類(lèi)的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();
    }
}
  • 通過(guò)clone()方法創(chuàng)建新的User實(shí)例對(duì)象
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();
    }
}

寫(xiě)在最后

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

相關(guān)文章

  • 使用log4j2關(guān)閉debug日志

    使用log4j2關(guān)閉debug日志

    這篇文章主要介紹了使用log4j2關(guān)閉debug日志方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • spring對(duì)JDBC和orm的支持實(shí)例詳解

    spring對(duì)JDBC和orm的支持實(shí)例詳解

    這篇文章主要介紹了spring對(duì)JDBC和orm的支持實(shí)例詳解,需要的朋友可以參考下
    2017-09-09
  • 100-200之間所有素?cái)?shù)求和程序代碼(二個(gè)版本)

    100-200之間所有素?cái)?shù)求和程序代碼(二個(gè)版本)

    寫(xiě)一個(gè)求100-200之間素?cái)?shù),并求和的程序,大家參考使用吧
    2013-11-11
  • 基于java枚舉類(lèi)綜合應(yīng)用的說(shuō)明

    基于java枚舉類(lèi)綜合應(yīng)用的說(shuō)明

    一個(gè)枚舉類(lèi),可以看成包括它的一些子類(lèi)(枚舉)的一個(gè)類(lèi),而且枚舉類(lèi)的構(gòu)造方法只能是私有的
    2013-05-05
  • 深入學(xué)習(xí)java ThreadLocal的源碼知識(shí)

    深入學(xué)習(xí)java ThreadLocal的源碼知識(shí)

    ThreadLocal是一個(gè)本地線程副本變量工具類(lèi)。主要用于將私有線程和該線程存放的副本對(duì)象做一個(gè)映射,各個(gè)線程之間的變量互不干擾,特別適用于各個(gè)線程依賴不通的變量值完成操作的場(chǎng)景。下面我們來(lái)詳細(xì)了解一下它吧
    2019-06-06
  • Java使用線程池批量處理數(shù)據(jù)操作具體流程

    Java使用線程池批量處理數(shù)據(jù)操作具體流程

    這篇文章主要給大家介紹了關(guān)于Java使用線程池批量處理數(shù)據(jù)操作的相關(guān)資料,Java多線程編程中線程池是一個(gè)非常重要的概念,線程池可以提高線程的復(fù)用率和任務(wù)調(diào)度的效率,尤其是當(dāng)需要查詢大批量數(shù)據(jù)時(shí),需要的朋友可以參考下
    2023-06-06
  • springboot對(duì)壓縮請(qǐng)求的處理方法

    springboot對(duì)壓縮請(qǐng)求的處理方法

    這篇文章主要介紹了springboot對(duì)壓縮請(qǐng)求的處理,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • 使用java為pdf添加書(shū)簽的方法(pdf書(shū)簽制作)

    使用java為pdf添加書(shū)簽的方法(pdf書(shū)簽制作)

    下載一些pdf格式的電子書(shū)沒(méi)有書(shū)簽,用JAVA寫(xiě)了一個(gè)小工具,將特定格式的文本解析成為書(shū)簽,然后保存到pdf格式中
    2014-02-02
  • Spring?Bean自動(dòng)裝配入門(mén)到精通

    Spring?Bean自動(dòng)裝配入門(mén)到精通

    自動(dòng)裝配是使用spring滿足bean依賴的一種方法,spring會(huì)在應(yīng)用上下文中為某個(gè)bean尋找其依賴的bean,Spring中bean有三種裝配機(jī)制,分別是:在xml中顯式配置、在java中顯式配置、隱式的bean發(fā)現(xiàn)機(jī)制和自動(dòng)裝配
    2022-08-08
  • Java網(wǎng)絡(luò)通信中URL與HTTP編程技術(shù)詳解

    Java網(wǎng)絡(luò)通信中URL與HTTP編程技術(shù)詳解

    要想實(shí)現(xiàn)網(wǎng)絡(luò)編程,除了可以使用Socket之外,我們還可以利用URL編程或HTTP編程技術(shù),所以今天這篇文章,就給大家介紹一下URL編程和HTTP編程技術(shù),看看這兩種技術(shù)有什么特點(diǎn),文中有詳細(xì)的代碼講解,需要的朋友可以參考下
    2023-11-11

最新評(píng)論