1、用new关键字创建对象,需要使用构造器。
![046ac4b1bd29d08cf222a38f5101b01f.png](https://i-blog.csdnimg.cn/blog_migrate/3f40ed3e6e1f95cd0a7d55264f2211bd.png)
2、使用反射机制创建对象,用Class类或Constructor类的newInstance()方法。需要使用构造器。
当使用Class类里的newInstance()方法,调用的是无参构造方法。
当使用java.lang.reflect.Constructor类里的newInstance方法,调用的是有参构造方法。
![7d702f2d9e1cc0b70ecaf4eca99ee447.png](https://i-blog.csdnimg.cn/blog_migrate/687c7f3eb4492514cfc60cee6a3e77e7.png)
![9fd6584df2d95c7e839646e1feaefcc7.png](https://i-blog.csdnimg.cn/blog_migrate/07962647fe9a92d38f8cb1a190bddbba.png)
![dde74cd340bb642b5f96b77bc91ac6d6.png](https://i-blog.csdnimg.cn/blog_migrate/18a40c28b7c8878900da492f05503a9c.png)
![135848d2659fad3ec35b30f9ad73c550.png](https://i-blog.csdnimg.cn/blog_migrate/2ee92ac420a604e5ecdf0c193ad57d13.png)
3、通过object类的clone方法
需要实现Cloneable接口,重写object类的clone方法。无论何时我们调用一个对象的clone方法,JVM就会创建一个新的对象,将前面对象的内容全部拷贝进去。用clone方法创建对象并不会调用任何构造函数。
4、使用反序列化
通过ObjectInputStream的readObject()方法反序列化类当我们序列化和反序列化一个对象,JVM会给我们创建一个单独的对象。为了反序列化一个对象,我们需要让我们的类实现Serializable接口。在反序列化时,JVM创建对象并不会调用任何构造函数。