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

Java創(chuàng)建對象的六種常用方式總結

 更新時間:2024年06月22日 11:30:31   作者:代碼無疆  
作為Java開發(fā)者,經常創(chuàng)建很多對象,你是否知道Java中創(chuàng)建對象有哪些方式呢?下面這篇文章主要給大家介紹了關于Java創(chuàng)建對象的六種常用方式,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

在Java中,創(chuàng)建對象通常有以下幾種方式:

使用new關鍵字

這是最常見的方式,通過調用類的構造函數(shù)來創(chuàng)建對象。

public class MyClass {
    int x;

    MyClass(int x) {
        this.x = x;
    }

    public static void main(String[] args) {
        MyClass obj = new MyClass(10); // 使用new關鍵字創(chuàng)建對象
        System.out.println(obj.x); // 輸出: 10
    }
}

使用反射(Reflection)

Java的反射API允許你在運行時創(chuàng)建對象。

public class MyClass {
    // ... 省略其他代碼 ...

    public static void main(String[] args) throws Exception {
        Class<?> clazz = MyClass.class;
        MyClass obj = (MyClass) clazz.getDeclaredConstructor(int.class).newInstance(20); // 使用反射創(chuàng)建對象
        System.out.println(obj.x); // 輸出: 20
    }
}

注意:反射通常用于更高級的場景,因為它涉及到更多的錯誤檢查和異常處理。

使用Class.forName()與newInstance()(已過時)

雖然Class.newInstance()方法在Java 9中已被標記為過時,但在早期版本中,你可以使用它(與forName()結合)來創(chuàng)建對象。但是,由于它不支持帶參數(shù)的構造函數(shù),所以其用途有限。

// 注意:此方法在Java 9+中已過時,不建議使用
public class MyClass {
    // ... 省略其他代碼 ...

    // 假設MyClass有一個無參數(shù)的構造函數(shù)
    public static void main(String[] args) throws Exception {
        MyClass obj = (MyClass) Class.forName("MyClass").newInstance(); // 使用Class.forName和newInstance創(chuàng)建對象
        // 注意:這種方法不支持帶參數(shù)的構造函數(shù)
    }
}

使用反序列化(Deserialization)

如果你的對象之前已經被序列化(寫入到一個輸出流中),你可以通過反序列化來創(chuàng)建它的一個新實例。

import java.io.*;

public class MyClass implements Serializable {
    // ... 省略其他代碼和序列化ID ...

    public static void main(String[] args) throws Exception {
        // 假設我們有一個包含MyClass對象的文件
        FileInputStream fis = new FileInputStream("myfile.ser");
        ObjectInputStream ois = new ObjectInputStream(fis);
        MyClass obj = (MyClass) ois.readObject(); // 通過反序列化創(chuàng)建對象
        ois.close();
        fis.close();
        // 現(xiàn)在你可以使用obj了
    }
}

使用工廠方法(Factory Method)

下滑查看解決方法

工廠方法是一種設計模式,它使用靜態(tài)方法來創(chuàng)建對象。這通常用于封裝對象的創(chuàng)建邏輯,以便在需要時可以更改它。

public class MyClass {
    // ... 省略其他代碼 ...

    public static MyClass createInstance(int x) {
        return new MyClass(x); // 使用工廠方法創(chuàng)建對象
    }

    public static void main(String[] args) {
        MyClass obj = MyClass.createInstance(30); // 使用工廠方法創(chuàng)建對象
        System.out.println(obj.x); // 輸出: 30
    }
}

使用克?。–lone)

如果你已經有一個對象,并且想要創(chuàng)建它的一個精確副本,你可以使用clone()方法(但需要注意的是,它默認是淺拷貝,且需要實現(xiàn)Cloneable接口)。

public class MyClass implements Cloneable {
    int x;

    // ... 省略其他代碼 ...

    @Override
    protected MyClass clone() throws CloneNotSupportedException {
        return (MyClass) super.clone(); // 使用clone方法創(chuàng)建對象的副本
    }

    public static void main(String[] args) throws CloneNotSupportedException {
        MyClass original = new MyClass(40);
        MyClass copy = original.clone(); // 使用clone方法創(chuàng)建對象的副本
        System.out.println(copy.x); // 輸出: 40
    }
}

注意:雖然上述方法都可以用來創(chuàng)建對象,但在實際項目中,最常用的還是使用new關鍵字和工廠方法。其他方法通常用于更高級或特定的場景。

附:示例代碼(全)

以下是本文所用到的所有示例代碼。

編寫Student學生類

package com.effective.chapter2.other;
 
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
 
import java.io.Serializable;
 
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student implements Cloneable, Serializable {
    private String name;
    private Integer age;
 
    @Override
    public Student clone() {
        try {
            Student clone = (Student) super.clone();
            // TODO: copy mutable state here, so the clone can't change the internals of the original
            return clone;
        } catch (CloneNotSupportedException e) {
            throw new AssertionError();
        }
    }
}

編寫測試類

package com.effective.chapter2.other;
 
import java.io.*;
import java.lang.reflect.Constructor;
 
public class CreateObjectTest {
 
    private static final String FILE_NAME = "student.obj";
 
    public static void main(String[] args) throws InstantiationException, IllegalAccessException, IOException {
 
        // 1、使用new關鍵字創(chuàng)建對象
        Student student1 = new Student();
        System.out.println("使用new關鍵字創(chuàng)建對象:" + student1);
 
        // 2、使用Class類的newInstance()方法創(chuàng)建對象
        Student student2 = Student.class.newInstance();
        System.out.println("使用Class類的newInstance()方法創(chuàng)建對象:" + student2);
 
        // 3、使用Constructor類的newInstance()方法創(chuàng)建對象
        Constructor student3 = Constructor.class.newInstance();
        System.out.println("使用Constructor類的newInstance()方法創(chuàng)建對象:" + student3);
 
        // 4、使用clone()方法創(chuàng)建對象
        Student student4 = student2.clone();
        System.out.println("使用clone()方法創(chuàng)建對象:" + student4);
 
        try {
            // Java序列化是指把Java對象轉換為字節(jié)序列的過程,而Java反序列化是指把字節(jié)序列恢復為Java對象的過程;
            // 序列化對象
            ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(FILE_NAME));
            oos.writeObject(student1);
 
            ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FILE_NAME));
            // 5、使用反序列化創(chuàng)建對象
            Object student5 = ois.readObject();
            System.out.println("使用反序列化創(chuàng)建對象:" + student5);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
    }
}

總結

到此這篇關于Java創(chuàng)建對象的六種常用方式總結的文章就介紹到這了,更多相關Java創(chuàng)建對象方式內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 解決org.springframework.context.ApplicationContextException報錯的問題

    解決org.springframework.context.ApplicationContextException報錯的

    這篇文章主要介紹了解決org.springframework.context.ApplicationContextException報錯的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Spring Cloud Alibaba 之 Nacos教程詳解

    Spring Cloud Alibaba 之 Nacos教程詳解

    Nacos是阿里的一個開源產品,它是針對微服務架構中的服務發(fā)現(xiàn)、配置管理、服務治理的綜合性解決方案。這篇文章主要介紹了Spring Cloud Alibaba 之 Nacos的相關知識,需要的朋友可以參考下
    2020-11-11
  • Java實現(xiàn)的兩個線程同時運行案例

    Java實現(xiàn)的兩個線程同時運行案例

    這篇文章主要介紹了Java實現(xiàn)的兩個線程同時運行,涉及java多線程相關操作與使用技巧,需要的朋友可以參考下
    2019-07-07
  • Spring解決循環(huán)依賴的方法及三級緩存機制實踐案例

    Spring解決循環(huán)依賴的方法及三級緩存機制實踐案例

    Spring通過三級緩存解決單例Bean循環(huán)依賴,但無法處理構造器、prototype作用域及@Async場景,建議使用setter注入、@Lazy注解和架構優(yōu)化,遵循設計原則避免依賴問題,本文介紹Spring如何解決循環(huán)依賴:深入理解三級緩存機制,感興趣的朋友一起看看吧
    2025-09-09
  • Java連接sftp服務器實現(xiàn)上傳下載功能

    Java連接sftp服務器實現(xiàn)上傳下載功能

    這篇文章主要介紹了java連接sftp服務器實現(xiàn)上傳下載,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • 在Android中使用WebView在線查看PDF文件的方法示例

    在Android中使用WebView在線查看PDF文件的方法示例

    在Android應用開發(fā)中,有時我們需要在客戶端展示PDF文件,以便用戶可以閱讀或交互,這篇文章主要介紹了在Android中使用WebView在線查看PDF文件的方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-09-09
  • mapstruct的用法之qualifiedByName示例詳解

    mapstruct的用法之qualifiedByName示例詳解

    qualifiedByName的意思就是使用這個Mapper接口中的指定的默認方法去處理這個屬性的轉換,而不是簡單的get?set,今天通過本文給大家介紹下mapstruct的用法之qualifiedByName示例詳解,感興趣的朋友一起看看吧
    2022-04-04
  • SpringMVC如何接收參數(shù)各種場景

    SpringMVC如何接收參數(shù)各種場景

    這篇文章主要介紹了SpringMVC如何接收參數(shù)各種場景,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • java.net.URL超時時間默認無限制問題小結

    java.net.URL超時時間默認無限制問題小結

    文章介紹了如何在Java中使用URLConnection或HttpURLConnection設置連接和讀取超時,以處理網(wǎng)絡問題導致的長時間等待,通過httpstat.us網(wǎng)站可以測試不同延遲的請求,并演示了如何通過調整超時時間處理超時異常,感興趣的朋友一起看看吧
    2025-02-02
  • 關于Spring項目對JDBC的支持與基本使用詳解

    關于Spring項目對JDBC的支持與基本使用詳解

    這段時間一直在觀看Spring框架,所以下面這篇文章主要給大家介紹了關于Spring項目對JDBC的支持與基本使用的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-11-11

最新評論

阳高县| 体育| 台安县| 怀集县| 余庆县| 遂川县| 讷河市| 中阳县| 宣汉县| 吉林市| 永德县| 镇赉县| 望城县| 教育| 兰西县| 保定市| 大关县| 商都县| 屏山县| 靖远县| 云安县| 邛崃市| 丰都县| 博罗县| 许昌县| 南丰县| 防城港市| 阿城市| 贵港市| 习水县| 郴州市| 泗阳县| 怀化市| 瑞安市| 张掖市| 泸溪县| 九龙县| 资兴市| 东丰县| 江北区| 府谷县|