1.创建对象的五种方式
package com.linyf.demo;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
/**
* 创建对象的五种方式
*/
public class ObjectCreateTest implements Cloneable{
public static void main(String[] args) throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException, CloneNotSupportedException, IOException, ClassNotFoundException {
// 1. 使用new 关键字创建
Object o = new Object();
// 2. 使用反射
Object o1 = Object.class.newInstance();
// 3. 使用Constructor
Constructor<Object> constructor = Object.class.getConstructor();
Object o2 = constructor.newInstance();
// 4. clone 需要实现实现Cloneable接口 ----------不常用
ObjectCreateTest objectCreateTest = new ObjectCreateTest();
ObjectCreateTest clone = (ObjectCreateTest)objectCreateTest.clone();
// 5. 反序列化 ------------不常用
ObjectInputStream in = new ObjectInputStream(new FileInputStream("data.obj"));
ObjectCreateTest seriaObj = (ObjectCreateTest) in.readObject();
}
}
2.创建对象的过程
对于一个普通Java对象的创建,大致有以下过程:
1、虚拟机遇到new指令,到常量池定位到这个类的符号引用。
2、检查符号引用代表的类是否被加载、解析、初始化过。
3、虚拟机为对象分配内存。
4、虚拟机将分配到的内存空间都初始化为零值。
5、虚拟机对对象进行必要的设置。
6、执行方法,成员变量进行初始化。