- 使用new直接创建
- 使用java反射创建
- 调用clone()方法,进行实例的拷贝
- 通过反序列化类获取
使用new直接创建
Test t = new Test();
使用java反射创建
1、获取Class对象的三种方式
- 公有属性class
Class<?> clazz = Test.class;
- 方法getClass()
Test t = new Test();
Class<?> clazz = t.getClass();
- Class.forName()
Class<?> clazz = Class.forName("com.xx.Test");
2、通过反射实例化对象的两种方式
- Class.newInstance()
Class<?> clazz = Class.forName("com.xx.Test");
Test t = (Test) clazz.newInstance();
- Constructor.newInstance()
Constructor[] constructor = Test.class.getConstructors();
Test t = (Test) constructor[0].newInstance(null);
备注说明:枚举类型不支持反射来实现,因此java推荐使用enum实现单例模式
if ((clazz.getModifiers() & Modifier.ENUM) != 0)
throw new IllegalArgumentException("Cannot reflectively create enum objects");
调用clone()方法,进行实例的拷贝
Test t = new Test();
Test t2 = (Test) t.clone();
通过反序列化类获取
通过ObjectInputStream的readObject()的方法