Java开发者每天需要创建非常多的对象,但是大部分人都会依赖系统,然而还有很多创建方法,大家一起来了解一下。
我们也可以使用Class类的newInstance方法创建对象。这个newInstance方法调用无参的构造函数创建对象。
我们可以通过下面方式调用newInstance方法创建对象:
Employeeemp2=(Employee)Class.forName("org.programming.mitra.exercises.Employee").newInstance();
或者
Employeeemp2=Employee.class.newInstance();
51:invokevirtual#70//Methodjava/lang/Class.newInstance:()Ljava/lang/Object;
和Class类的newInstance方法很像,java.lang.reflect.Constructor类里也有一个newInstance方法可以创建对象。我们可以通过这个newInstance方法调用有参数的和私有的构造函数。
Constructor<Employee>constructor=Employee.class.getConstructor();
Employeeemp3=constructor.newInstance();
111:invokevirtual#80//Methodjava/lang/reflect/Constructor.newInstance:([Ljava/lang/Object;)Ljava/lang/Object;
这两种newInstance方法就是大家所说的反射。事实上Class的newInstance方法内部调用Constructor的newInstance方法。这也是众多框架,如Spring、Hibernate、Struts等使用后者的原因。
无论何时我们调用一个对象的clone方法,jvm就会创建一个新的对象,将前面对象的内容全部拷贝进去。用clone方法创建对象并不会调用任何构造函数。
要使用clone方法,我们需要先实现Cloneable接口并实现其定义的clone方法。
Employeeemp4=(Employee)emp3.clone();
162:invokevirtual#87//Methodorg/programming/mitra/exercises/Employee.clone()Ljava/lang/Object;
这是最常见也是最简单的创建对象的方式了。通过这种方式,我们可以调用任意的构造函数(无参的和带参数的)。
Employeeemp1=newEmployee();
0:new#19//classorg/programming/mitra/exercises/Employee
3:dup
4:invokespecial#21//Methodorg/programming/mitra/exercises/Employee."":()V