1、用new语句直接创建对象,这是最常见的创建对象的方法。

【Java基础】Java创建对象的五种方式

2、通过工厂方法返回对象,如:String str = String.valueOf(23); 

【Java基础】Java创建对象的五种方式

3、调用对象的clone()方法。

【Java基础】Java创建对象的五种方式

4、运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。如:Object obj = Class.forName("java.lang.Object").newInstance(); 

 【Java基础】Java创建对象的五种方式

5、通过I/O流(包括反序列化),如运用反序列化手段,调用java.io.ObjectInputStream对象的 readObject()方法。

 【Java基础】Java创建对象的五种方式

源代码

package main.java;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

/**
 * @description 创建对象工具类
 * @author Lints
 * @date 2019/12/4 10:35
 * @sine version 1.0
 */
public class CreateObjectUtil {

    // 导读:不想看大片注释的朋友,在IDEA中,把光标移至块注释内,按 'Ctrl' + '-' 折叠注释。

    /**
     * @description 通过new关键字创建(实例化)对象
     * @param
     * @return java.lang.Object
     * @author Lints
     * @date 2019/12/4 10:36
     * @sine version 1.0
     */
    public static Object createObjectByNewKeyword(){
        String strObj = new String("我是new关键字创建的字符串对象");
        return strObj;
    }

    /**
     * @description 通过工厂方法创建(实例化)对象
     * @param
     * @return java.lang.Object
     * @author Lints
     * @date 2019/12/4 10:36
     * @sine version 1.0
     */
    public static Object createObjectByFactoryMethod() {
        String strObj = String.valueOf(12345);
        return strObj;
    }

    /**
     * @description 通过Object类的clone()方法复制得到对象。
     * @param
     * @return java.lang.Object
     * @author Lints
     * @date 2019/12/4 10:38
     * @sine version 1.0
     */
    public static Object createObjectByCloneMethod() {
        CreateObjectDemo srcObj = new CreateObjectDemo();
        Object cloneObj = null;
        try {
            cloneObj = srcObj.clone();
        } catch (CloneNotSupportedException e) {
            // todo handle the exception
        }
        return cloneObj;
    }

    /**
     * @description 根据Java反射机制获取对象
     * @param
     * @return java.lang.Object
     * @author Lints
     * @date 2019/12/4 15:06
     * @sine version 1.0
     */
    public static Object createObjectByReflection() {
        Object obj = null;
        try {
            obj = CreateObjectDemo.class.newInstance();
            // obj = String.class.newInstance();
        } catch (Exception e) {
            // todo handle the exception
        }
        return obj;
    }

    /**
     * @description 通过反序列化机制读取文件对象
     * @param
     * @return java.lang.Object
     * @author Lints
     * @date 2019/12/4 17:56
     * @sine version 1.0
     */
    public static Object createObjectBySerialization() {

        File objFile = new File("CreateObjectDemo.obj");
        CreateObjectDemo obj = new CreateObjectDemo();
        CreateObjectDemo objFromFile = null;
        System.out.println();
        System.out.println("---序列化前---");
        System.out.println("我是obj对象:" + obj);
        System.out.println("我是objFromFile反序列化对象:" + objFromFile);


        // JDK1.7后,可以使用try-with-recources优雅关闭流对象
        try (
            // 输出流,写对象到磁盘
            FileOutputStream fos = new FileOutputStream(objFile);
            ObjectOutputStream oos = new ObjectOutputStream(fos);

            // 输入流,从磁盘读对象到内存
            FileInputStream fis = new FileInputStream(objFile);
            ObjectInputStream ois = new ObjectInputStream(fis);
        ) {
            oos.writeObject(obj);
            objFromFile = (CreateObjectDemo) ois.readObject();
            System.out.println();
            System.out.println("---反序列化后---");
            System.out.println("我是obj对象:" + obj);
            System.out.println("我是objFromFile反序列化对象:" + objFromFile);
        } catch (Exception e) {
            // todo handle exception
        }
        return objFromFile;
    }

}
CreateObjectUtil.java 

相关文章:

  • 2022-02-12
  • 2022-02-11
  • 2022-12-23
  • 2021-06-09
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-01-07
  • 2021-12-13
  • 2022-01-02
  • 2022-02-20
  • 2022-12-23
  • 2021-04-13
相关资源
相似解决方案