1. 直接用new (new ****( )):代码直观,程序会出现耦合度,不知道有什么类就无法使用new ClassName( )的方法实现。
2.Class类,通过Class类来实例化一个对象,通过字符串操作完成。Class.newInstance(“******”);
3.对象的克隆,将对象拷贝一份,但是此种方法需要在子类中复写clone( ),并标识出可以被克隆(+ implements Cloneable)。
4.通过ObjectInputStream的readObject( )方法反序列化类。程序出现了接口,如果一个接口的子类直接通过new实例化会造成程序耦合,所以使用工厂进行解耦合。
PS:无论哪一种方式必须经过的一步---调用构造方法。无论怎样构造函数作为初始化类的意义怎样都不会改变。