很多类里都有 public static XXX getInstance(){ ...... return this;}
这样的静态方法,来获得该类的实例,那么为什么不选用XXX xxx=new XXX();的方法来获得实例呢?是不是因为XXX类往往是抽象类而不能new,但是又想用它的实例?
这样的静态方法,来获得该类的实例,那么为什么不选用XXX xxx=new XXX();的方法来获得实例呢?是不是因为XXX类往往是抽象类而不能new,但是又想用它的实例?
解决方案 »
- 请问,JPanel上放置了多个JToggleButton,如何统一处理这些button的事件
- 大家给点意见哈
- 学习第一天遇到问题……
- 小弟初学java 遇到点问题
- linux下jdk安装成功,但是输入“java”“javac”都显示 command not found 请老牛帮忙,雪地里狂等!
- java 中怎么写输入语句`
- 小弟的这个程序卡住了,关于jlist的使用...望高手指点,100分送上...
- 弹出窗口问题
- 进来再说!!!!嗷~~~~~~~~~
- 如何拆分一个字符串(Eg:"E:\resin\doc\programe\upload\qqq")大家帮帮忙!!!在线等!!!
- 关于cmd窗口下编译的问题
- JSP网上购物车
就是这个类只能有一个对象所以在getInstance方法里构造一个对象
返回的总是同一个对象。再一种可能处于设计考虑。
比如现在用spring就很少有new。
原因最好看一下设计模式的书。
我看过《设计模式》感觉不错。
A a2=A.getInstance();不就是两个了么??
Class Afactory{
A a=null;
public getA(){
if(A!=null){
a= new A();
return a;
}else{ return a;
}
}
}这样如果调用两次getA()的话实际上是一个对象有两个引用?
A a1=A.getInstance();
A a2=A.getInstance();
………
……
……
…
它的引用总是引用的同一个的对象(static变量总是会在类载入内存时就首先进行初始化),不论有多少个都是同一个对象。
第一次回答,不知道说明白了没有。
你可以直接看JDK里面怎么写的
{
Calendar cal = createCalendar(TimeZone.getDefaultRef(), Locale.getDefault());
cal.sharedZone = true;
return cal;
} private static Calendar createCalendar(TimeZone zone,
Locale aLocale)
{
// If the specified locale is a Thai locale, returns a BuddhistCalendar
// instance.
if ("th".equals(aLocale.getLanguage())
&& ("TH".equals(aLocale.getCountry()))) {
return new sun.util.BuddhistCalendar(zone, aLocale);
} // else create the default calendar
return new GregorianCalendar(zone, aLocale);
}
可见,getInstance 只是一种得到实例的方法而已,不一定都是singleton 模式
它的引用总是引用的同一个的对象(static变量总是会在类载入内存时就首先进行初始化),不论有多少个都是同一个对象。
第一次回答,不知道说明白了没有。
A a1=A.getInstance();
A a2=A.getInstance(); 如果我这么写的话,a1,a2实际上是同一个对象的不同引用,那么a1改变了,a2也跟着改变了,类似指针?
A1,A2,都是只是引用,而不是真正的对象,他们的共同点是,引用的对象是同一个,准确的说,是A1引用的对象改变了,意味着A2引用的对象也改变了,因为他们引用的是同一个对象,而你说的,A1改变,A2跟着改变的说法是有问题的,因为A1引用和A2引用 两个引用本身是没有关系的,比如A1,跑去引用NULL了,而A2,依然引用的是原来的那个对象,对象本身没有改变。引用的确类似于指针,它们存贮都是实际对象的内存地址,而不是对象本身,不知道说明白了没有。
A a1=A.getInstance();
A a2=A.getInstance(); a1.getValue=5;
a2.getValue=5;
a1.add(1);
a1.getValue=6;
a2.getValue=6;
楼上是不是这个意思??A a1=new A();
A a2=a1;
和上面说的是不是就是一致的?
把构造方法私有
用getInstance()来得到
保证只有一个对象的产生···
别的类要调用到它的话,只能用A.getInstance()来拿到它的对象··
不能用new