java实例化有4种方式:
一、用new语句创建对象,这是最常用的创建对象方式。
二、运用反射手段,调用java.lang…Class或者java.lang.reflect.Constructor类的newInstance实例化方法。
三、调用对象的clone方法。
四、运用反序列化机制。


4种实例化方法

  • 一、new语句创建对象
  • 二、利用反射机制
  • 1、java.lang.Class.newInstance()
  • 2、java.lang.reflect.Constructor类的newInstance()
  • 三、调用对象的clone方法
  • 四、运用反序列化手段



一、new语句创建对象

User user = new User();

二、利用反射机制

根据依赖倒转原则,实际编码过程中主要针对接口编程而不是具体类数据。在面向接口编程模式,经常调用该方法创建实例。
例如XML配置文件中,获取具体子类的类名称字符串subCLassName,然后根据获得类名字符串进行实例化。

Class c = Class.foName(subClassName);

1、java.lang.Class.newInstance()

User user = (User) c.newInstance();	//不带有任何参数

2、java.lang.reflect.Constructor类的newInstance()

Constructor con = c.getConstructor(String.class);
User user = (User) con.newInstance("name");

public Object getNewObject(String className) trows Exception {
	Class tClass = Class.forName(className);
	Object tObject = tClass.newInstance();
	return tObject;
}

三、调用对象的clone方法

User user1 = new User(1, "mac");
User user2 = null;
user2 = (User) user1.clone();

四、运用反序列化手段

**序列化:**把对象状态转化位可保持或者传输的格式过程,被序列化的对象必须implments Serializable;
**反序列化:**把流转换为对象的过程。
当两个进程在进行远程传输过程中时,彼此可以发送各种类型的数据,无论是哪种数据类型,都会以二进制序列的形式在网络上传送,发送方需要把这个java对象转换为字节序列,才可以在网络上传送,也就是序列化的过程。

序列化和反序列化

package serial_external;

import org.junit.Test;

import java.io.*;

/**
 * @author mac
 */
public class SerializableTest {
    public static void main(String[] args) {

    }

    @Test
    public void test() throws IOException {
        A a = new A();
        a.i = 1;
        a.s = "a";
        FileOutputStream fileOutputStream = null;
        FileInputStream fileInputStream = null;
        try {
            //obj 写入文件
            fileOutputStream = new FileOutputStream("temp");
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
            objectOutputStream.writeObject(a);
            fileOutputStream.close();
            //通过文件读取obj
            fileInputStream = new FileInputStream("temp");
            ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
            A a2 = (A) objectInputStream.readObject();
            fileInputStream.close();
            System.out.println(a2.i);
            System.out.println(a2.s);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

class A implements Serializable {
    int i;
    String s;
}