咱们老是讨论没有对象就去new一个对象,建立对象的方式在我这里变成了根深蒂固的new方式建立,可是其实建立对象的方式仍是有不少种的,不仅仅有new方式建立对象,还有使用反射机制建立对象,使用clone方法去建立对象,经过序列化和反序列化的方式去建立对象。这里就总结一下建立对象的几种方式,来好好学习一下java建立对象的方式。java
这是咱们最多见的也是最简单的建立对象的方式,经过这种方式咱们还能够调用任意的够赞函数(无参的和有参的)。
好比:Student student = new Student();框架
这个newInstance方法调用无参的构造器建立对象,
如:Student student2 = (Student)Class.forName("根路径.Student").newInstance();
或者:Student stu = Student.class.newInstance();函数
本方法和Class类的newInstance方法很像,java.lang.relect.Constructor类里也有一个newInstance方法能够建立对象。我
们能够经过这个newInstance方法调用有参数的和私有的构造函数。
如: Constructor<Student> constructor = Student.class.getInstance(); Student stu = constructor.newInstance();
这两种newInstance的方法就是你们所说的反射,事实上Class的newInstance方法内部调用Constructor的newInstance方法。
这也是众多框架Spring、Hibernate、Struts等使用后者的缘由。学习
论什么时候咱们调用一个对象的clone方法,JVM就会建立一个新的对象,将前面的对象的内容所有拷贝进去,用clone方法建立对象并不会调用任何构造函数。要使用clone方法,咱们必须先实现Cloneable接口并实现其定义的clone方法。
如:Student stu2 = <Student>stu.clone();
这也是原型模式的应用。spa
当咱们序列化和反序列化一个对象,JVM会给咱们建立一个单独的对象,在反序列化时,JVM建立对象并不会调用任何构造函数。为了反序列化一个对象,咱们须要让咱们的类实现Serializable接口。
如:ObjectInputStream in = new ObjectInputStream (new FileInputStream("data.obj")); 对象
Student stu3 = (Student)in.readObject();接口