只是我在考虑编写单例课程的其他方式。那么,该课程被视为单身人士课程吗?
public class MyClass{ static Myclass myclass; static { myclass = new MyClass();} private MyClass(){} public static MyClass getInstance() { return myclass; } }
因为静态块只能运行一次。
不它不是。您没有声明myClass private static final,也不getInstance()是static。该代码也不会真正编译。
myClass
private static final
getInstance()
static
这是单例成语:
public class MyClass { private static final MyClass myClass = new MyClass(); private MyClass() {} public static MyClass getInstance() { return myClass; } }
应该为private,以便其他任何人都不能直接访问它。应该static只有一个。应该final这样,以便不能重新分配它。您还需要在声明期间 直接 实例化它,这样就不必担心线程那么多。
private
final
如果加载成本很高,因此您宁愿延迟加载Singleton,则考虑Singleton Holder习惯用法,它按需进行初始化,而不是在类加载期间进行初始化:
public class MyClass { private MyClass() {} private static class LazyHolder { private static final MyClass myClass = new MyClass(); } public static MyClass getInstance() { return LazyHolder.myClass; } }
但是,您应该提出一个大问号,是否需要一个 Singleton 。通常不需要。 仅 静态变量,枚举,工厂类和/或依赖项注入通常是更好的选择。