1、new
//1、 new创建
User user = new User();
2、反射
a.使用Class类的newInstance方法
//Class.forName--通过类的全路径,获取类的实例,
Class class2= null;
try {
//2.1 使用Class类的newInstance方法
//Class<User> class1= User.class; 可以直接通过类名反射,也可以通过类路径
class2 = Class.forName("com.chengang.demo.demo.User");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
// 最终也是通过Class的newInstance
User u3 = (User)class2.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
扩展一下获取对象的三种方式:
通过类名获取 类名.class
通过对象获取 对象名.getClass()
通过全类名获取 class.forName()
b.使用Constructor类的newInstance方法
//2.2 通过构造器Constructor newInstance
Constructor<User> constructor = null;
try {
constructor = User.class.getConstructor();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
try {
User stu = constructor.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
对比:
事实上Class的newInstance方法内部调用Constructor的newInstance方法。这也是众多框架Spring、Hibernate、Struts等使用后者的原因。
3、使用Clone的方法
无论何时我们调用一个对象的clone方法,JVM就会创建一个新的对象,将前面的对象的内容全部拷贝进去,用clone方法创建对象并不会调用任何构造函数。要使用clone方法,我们必须先实现Cloneable接口并实现其定义的clone方法
4、使用反序列化
首先介绍一下序列化的含义直接上链接:
Java 之 Serializable 序列化和反序列化的概念,作用的通俗易懂的解释_菜的抠脚的博客-CSDN博客_序列化的作用
序列化和反序列化的概念
序列化:把对象转换为字节序列的过程称为对象的序列化。
反序列化:把字节序列恢复为对象的过程称为对象的反序列化。
想要序列化需要实现Serializable 接口