java实例化

来源:百度知道 编辑:UC知道 时间:2024/06/18 11:42:26
请问java中:
用new
用getInstance()
用newInstance()
这三种实例化的方法有什么区别呢?谢谢!

实例化的只有new,其它两个都是别人在写类时手工加的方法,只是这些方法里面会new(即实例化对象)一个对象,然后返回这个对象。

没有方法体,看不出来.一般情况下,也会在方法体里使用关键字new来实例化一个类.如果是这样,就没有区别了,类的实例化还可以通过反射和注入(这是高级部分,先把new搞精通吧).

不知道你问的什么东西

后两种方法是静态工厂方法。它们和new语句的区别如下:
我们要得到一个对象,马上想到构造方法(new语句调用构造方法),其实,静态工厂方法也可以替我们做到。
例如,在jdk1.4里面,Boolean用了一个静态方法来得到一个boolean对象:
public static Boolean valueOf(boolean b)

question:这个方法实际上并不返回一个object?
对的, sun的jdk 帮助里面讲: If a new Boolean instance is not required, this method should generally be used in preference to the constrUCtor Boolean(boolean).
但是,不是说静态工厂方法所有时候都不返回一个object,只是不是所有时候都返回一个object。

使用静态工厂方法和构造方法比较的优缺点:
优点:
1. 静态工厂方法都是有自己的名字,轻易理解.
2. 静态工厂方法并不要求每次都生成一个对象.比如上面提到的Boolean的public static Boolean valueOf(boolean b)就不会返回一个object. sun的jdk帮助文档里面也提到,在不需要得到一个对象的情况下,使用valueof方法可以得到性能的提升.
而且这样,可以控制类在生的期间该类的句柄数,这个作用在单态(item 21)和类型安全(item 21)都是有用的.
3. 静态工厂方法可以返回该类的任何子类,这给了程序员更大的选择空间.
比如Collections,用了很多静态工厂方法来得到immuable的set,map之类的.