亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

一文盤點(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)文章

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

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

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

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

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

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

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

    基于java枚舉類綜合應(yīng)用的說明

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

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

    ThreadLocal是一個(gè)本地線程副本變量工具類。主要用于將私有線程和該線程存放的副本對象做一個(gè)映射,各個(gè)線程之間的變量互不干擾,特別適用于各個(gè)線程依賴不通的變量值完成操作的場景。下面我們來詳細(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對壓縮請求的處理方法

    springboot對壓縮請求的處理方法

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

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

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

    Spring?Bean自動裝配入門到精通

    自動裝配是使用spring滿足bean依賴的一種方法,spring會在應(yīng)用上下文中為某個(gè)bean尋找其依賴的bean,Spring中bean有三種裝配機(jī)制,分別是:在xml中顯式配置、在java中顯式配置、隱式的bean發(fā)現(xiàn)機(jī)制和自動裝配
    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

最新評論