62,567
社区成员




class LazySingleTest {
private static LazySingleTest st = null;
private LazySingleTest() {
}
//懒汉式
public synchronized static LazySingleTest getInstance() {
if (st == null) {
st = new LazySingleTest();
}
return st;
}
}
public class SingleTest {
private static SingleTest st = new SingleTest();
private SingleTest() {
}
//饿汉式
public static SingleTest getInstance() {
return st;
}
}
public class A{
public static void main(){
B b = B.getB();
println( b.getID()+"" );
B b2 = B.getB();
println( b2.getID()+"" );
C c1 = C.getC(1);
println( c1.getID()+"" );
C c2 = C.getC(2);
println( c2.getID()+"" );
C c3 = C.getC(100)+"" );
println( c3.getID()+"" );
D d = D.getD();
}
static void println(String s){System.out.println(s);}
}
class B{
final private int ID;
private B( int i ){ ID=i; }//将构造器隐藏 外界无法调用 于是就无法创建B的实例
private static B onlyb = new B( 0 );
//静态域在类中当然是只构造一次的 这仅仅是巧妙利用了static的特性
public static B getB(){ return onlyb; }//由这个public方法返回那唯一的静态实例
public int getID(){ return ID; } //仅仅是个返回ID的功能性方法;
}
//当然 方法还有其他的
class C {
private final int ID;
private C( int i ){ ID=i; }
static C c1 =new C(1);
static C c2 =new C(2);
static C c3 =new C(3);
public static C getC( int i ) { //你愿意的话 也可以一个方法专门返回一个实例
swich i{
case 1 : return c1;
case 2 : return c2;
default : return c3;
}
}
public int getID(){return ID;}
}//这种大概用处不大
class D {
private final int ID;
private static boolean have = fualse;
private static onlyd;
private D(int i){ ID=i; }
public static D getD(){
if(have!=fualse){onlyd=new D(0); have=ture; }
return onlyd;
}
public int getID(){return ID;}
}这个方式是用在某种特殊场合,比如内部类 不允许有static域,只好使用这样的方法;