null
没有查找or不存在,到是一种正常而非异常的行为
可以用空对象替代
运行时异常 变异时异常
直接吞掉、直接往上抛出、包裹成新的异常抛出
pulic需要参数保护,private可以用契约规避。
单例设计模式(Singleton Design Pattern)
构造函数需要是 private 访问权限的,这样才能避免外部通过 new 创建实例;考虑对象创建时的线程安全问题;考虑是否支持延迟加载;考虑 getInstance() 性能是否高(是否加锁)。
在类加载的时候,instance 静态实例就已经创建并初始化好了,所以,instance 实例的创建过程是线程安全的。不过,这样的实现方式不支持延迟加载(在真正用到 IdGenerator 的时候,再创建实例)
如果初始化耗时长,那我们最好不要等到真正要用它的时候,才去执行这个耗时长的初始化过程,这会影响到系统的性能(比如,在响应客户端接口请求的时候,做这个初始化操作,会导致此请求的响应时间变长,甚至超时)。采用饿汉式实现方式,将耗时的初始化操作,提前到程序启动的时候完成,这样就能避免在程序运行的时候,再去初始化导致的性能问题。
3. 双重检测
从业务概念上,有些数据在系统中只应该保存一份,就比较适合设计为单例类