前面的方法有个缺点,需要程序员检查8etsPo01凹方法的返回值,以确保它不是空的
员始终记得去检查错误的设想是招致失败的开始,应该尽力避免。
我们换种方法做,创建一个这样的类,如果试图多次实例化该类,它会抛出一个异常
需要程序员采取行动,因而这是一个安全的方法。这里先为这个例子创建自己的异常类。
蜕:e2摇絮露慧,:n‘紫害絮s丫;:美
注意,除了通过ba肥调用了父类的构造函数外,新的异常类实际上什么也没做。尽管如此,
有自己命名的异常类还是很方便的;在我们创建—个sp叨1既的实例时,如果抛出了这种类型日
常,系统会警告我们。
11.3抛出异常
接下来给出比航spMlM类的框架。这里略去了所有的打印方法,只集中于正确实现单件模
public c La3s 5pooLer (
s Lat 2c bool lnstance一5lag ‘ false; //t2ue lf one lnstance
public sPooLerl) I
lf (instance—flag)
throw nev SlngletDnEXcePtionI
”0nly one PrInter alloved,,);
e15e
Lnst6nce—flag!t2ue; //set flag
Console*Nr2:eL2ne (”PrLnter oPened“’);
员始终记得去检查错误的设想是招致失败的开始,应该尽力避免。
我们换种方法做,创建一个这样的类,如果试图多次实例化该类,它会抛出一个异常
需要程序员采取行动,因而这是一个安全的方法。这里先为这个例子创建自己的异常类。
蜕:e2摇絮露慧,:n‘紫害絮s丫;:美
注意,除了通过ba肥调用了父类的构造函数外,新的异常类实际上什么也没做。尽管如此,
有自己命名的异常类还是很方便的;在我们创建—个sp叨1既的实例时,如果抛出了这种类型日
常,系统会警告我们。
11.3抛出异常
接下来给出比航spMlM类的框架。这里略去了所有的打印方法,只集中于正确实现单件模
public c La3s 5pooLer (
s Lat 2c bool lnstance一5lag ‘ false; //t2ue lf one lnstance
public sPooLerl) I
lf (instance—flag)
throw nev SlngletDnEXcePtionI
”0nly one PrInter alloved,,);
e15e
Lnst6nce—flag!t2ue; //set flag
Console*Nr2:eL2ne (”PrLnter oPened“’);