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;
}