Tag: 单身人士

为什么有java单例类? 你什么时候需要使用一个

我理解单例类只能有一个实例,但我不明白为什么这样有用。 为什么不只是使用静态变量和方法创建一个类,并在需要时使用synchronize以确保没有两个线程同时在类中执行方法。 我只是不明白为什么有人会经历创造这种类的麻烦。 我知道我在这里遗漏了一些东西。 谢谢,

应用程序单例在Android中使用

我有一个facebook初始化sdk调用,我需要它来初始化应用程序启动的时刻: 我想使用我的Application类来做到这一点。 例如: public class App extends Application { @Override public void onCreate() { super.onCreate(); FacebookSdk.sdkInitialize(getApplicationContext()); } } 我有facebook登录按钮的主要活动: public class MainActivity extends AppCompatActivity { @BindView(R.id.login_button) LoginButton loginButton; private CallbackManager callbackManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); callbackManager = CallbackManager.Factory.create(); loginButton.registerCallback(callbackManager, new FacebookCallback() { @Override public void onSuccess(LoginResult loginResult) { } @Override […]

如何多次实例化Singleton?

我的代码中需要一个单例。 我用Java实现它,它运行良好。 我这样做的原因是为了确保在多个环境中,只有这个类的一个实例。 但现在我想用Unit测试在本地测试我的Singleton对象。 出于这个原因,我需要模拟这个Singleton的另一个实例(来自另一个设备的对象)。 那么有可能第二次实例化Singleton用于测试目的还是我必须嘲笑它​​? 我不确定,但我认为可以使用不同的类加载器吗?

用于序列化单例的瞬态

有效的Java – 为了保持单例保证,您必须将所有实例字段声明为瞬态并提供“readResolve”方法。 我们通过在这里声明瞬态场来实现什么目标? 这是一个示例: …. …. public final class MySingleton implements Serializable{ private int state; private MySingleton() { state =15; } private static final MySingleton INSTANCE = new MySingleton(); public static MySingleton getInstance() { return INSTANCE; } public int getState(){return state;} public void setState(int val){state=val;} private Object readResolve() throws ObjectStreamException { return INSTANCE; } […]

在Java中编写单例的不同方法

在java中编写单例的经典之处如下: public class SingletonObject { private SingletonObject() { } public static SingletonObject getSingletonObject() { if (ref == null) // it’s ok, we can call this constructor ref = new SingletonObject(); return ref; } private static SingletonObject ref; } 如果我们需要在multithreading情况下运行,我们可以添加synchronized关键字。 但我更喜欢把它写成: public class SingletonObject { private SingletonObject() { // no code req’d } public static SingletonObject […]

如何在Web应用程序中处理单例?

根据我的理解,单例基本上是当你有一个私有成员代表你想拥有单个实例的对象时。 然后在构造函数中初始化成员对象。 此对象的所有引用都是通过公共属性完成的,而public属性只引用已经实例化的私有成员。 现在在Web应用程序中,这是如何工作的? 在tomcat关闭之前,单个实例是否只在容器中挂起(比如tomcat)?

通过enum方式的Singleton是否被延迟初始化?

这是一个非常广泛的枚举单例代码: public enum enumClazz{ INSTANCE enumClazz(){ //do something } } 和一堆地方说这是一个懒惰的初始化。 但在阅读“ Java虚拟机内部”第7章 – 类型的生命周期后,我感到困惑: Java虚拟机规范为类和接口加载和链接的时序提供了实现的灵活性,但严格定义了初始化的时间。 所有实现必须在其第一次活动使用时初始化每个类或接口。 以下六种情况符合有效用途: 创建一个新的类实例(在字节码中,执行新指令。或者,通过隐式创建,reflection,克隆或反序列化。) 调用由类声明的静态方法(在字节码中,执行invokestatic指令) 使用或赋值由类或接口声明的静态字段,除了最终的静态字段并由编译时常量表达式初始化(​​在字节码中,执行getstatic或putstatic指令) 在Java API中调用某些reflection方法,例如Class类中的方法或java.lang.reflect包中的类 初始化类的子类(类的初始化需要事先初始化其超类。) 在Java虚拟机启动时将类指定为初始类(使用main()<方法) 粗体样式的第三点澄清如果字段是static final ,则字段的初始化在编译时发生。 同样, enumClazz的INSTANCE隐含等于public static final并符合第三点。 如果我的理解错了,有人可以纠正我吗?

单身模式(Bill Pugh的解决方案)

我正在阅读关于单身模式的维基,我不确定我是否理解这一点: https : //en.wikipedia.org/wiki/Initialization-on-demand_holder_idiom正确部分。 为了简单起见 : 为什么Bill Pugh的解决方案比上面的例子更好? 是因为VM在实际使用之前没有加载静态类或类似的东西,所以在转向getInstance()方法之前我们不创建对象? 那个方法线程安全只是在初始化对象的程度吗?

单例实例化

下面显示的是单例对象的创建。 public class Map_en_US extends mapTree { private static Map_en_US m_instance; private Map_en_US() {} static{ m_instance = new Map_en_US(); m_instance.init(); } public static Map_en_US getInstance(){ return m_instance; } @Override protected void init() { //some code; } } 我的问题是使用静态块进行实例化的原因是什么。 我熟悉单身实例化的以下forms。 public static Map_en_US getInstance(){ if(m_instance==null) m_instance = new Map_en_US(); }

如何在Android项目中使用Singleton模式?

我知道Singleton,但我无法在Android项目中使用它。 我是Android的初学者。 请告诉我在大型数据的Android项目中如何以及在哪里使用Singleton。 我用它来表示简单的值。