package edu.scit.singletion;public class Singletion {
public static Singletion singletion;
//专用的构造器,防止客户机创建多个实例
private Singletion(){
}
//设计唯一的访问接口
public static synchronized Singletion getInstance(){
if(singletion== null){
singletion = new Singletion();
}
return singletion;
}
public void print(){
System.out.println("==========hello==========");
}
public String toString(){
return "king";
}
}
class test{
public static void main(String [] args){
Singletion s =Singletion.getInstance();
s.print();
System.out.println(s.getClass());
Singletion s1 =Singletion.getInstance();
System.out.println(s1.getClass());
}
}请问这样可以证明我写的代码是单例模式吗==========hello==========
class edu.scit.singletion.Singletion
class edu.scit.singletion.Singletion
public static Singletion singletion;
//专用的构造器,防止客户机创建多个实例
private Singletion(){
}
//设计唯一的访问接口
public static synchronized Singletion getInstance(){
if(singletion== null){
singletion = new Singletion();
}
return singletion;
}
public void print(){
System.out.println("==========hello==========");
}
public String toString(){
return "king";
}
}
class test{
public static void main(String [] args){
Singletion s =Singletion.getInstance();
s.print();
System.out.println(s.getClass());
Singletion s1 =Singletion.getInstance();
System.out.println(s1.getClass());
}
}请问这样可以证明我写的代码是单例模式吗==========hello==========
class edu.scit.singletion.Singletion
class edu.scit.singletion.Singletion
public static void main(String [] args){
Singletion s =Singletion.getInstance();
s.print();
System.out.println(s.hashCode());
Singletion s1 =Singletion.getInstance();
System.out.println(s1.hashCode());
}
}输出结果是
==========hello==========
12677476
12677476
singletion = new Singletion();
}
return singletion;
} 这部分加个线程锁如何?
s和s1是引用,实际上指向了同一个堆地址
如果要测试可以在类中加工静态变量
public static int count = 0;
然后在私有函数加上
count++;
你在看count的值是1 就是单例了
public Object readResolve(){return Singletion ; }
public static void main(String [] args){
Singletion s =Singletion.getInstance();
s.print();
System.out.println(s.getClass());
Singletion s1 =Singletion.getInstance();
System.out.println(s1.getClass());
}
} System.out.println(s1==s); //这样就证明是单例啊getClass只是返回类名,不是实例啊