我知道Singleton模式有很多问题。但是在这里,我想了解有关输出的信息,该输出也可能涵盖Java中“静态”的工作方式。
public class Singleton {
private static Singleton currentSingleton = new Singleton();
public static Singleton getSingleton() {
return currentSingleton;
}
private Singleton() {
System.out.println("Singleton private constructor...");
}
public static void main(String[] args) {
System.out.println("Main method...");
}
}
这是运行代码的输出…
单例私有构造函数…
主要方法…
当我调试此代码时,控制权首先移至行 System.out.println("Singleton private constructor...")
并打印。(此时,私有静态变量currentSingleton仍为null),
然后转到第几行
private static Singleton currentSingleton = new Singleton();
,然后初始化私有变量。然后最后进入main()方法并打印。
我的问题是:
private static Singleton currentSingleton = new Singleton();
我主要想知道该程序的控制流程。
在正确初始化类之前(即已评估静态字段和静态块),您无法在类中调用main方法。初始化后,将通过调用私有构造函数来创建您的单例实例。稍后调用main方法。
有问题的类具有一个静态字段,您可以在该字段中添加值。由于该字段是静态的,因此必须先初始化该字段,然后才能在任何上下文中使用该类,也就是说,它必须接收一个值。在这种情况下,其值恰巧是同一类的实例。这就是在类初始化期间触发您的私有构造函数的原因。
如果您想深入研究过程并更好地理解它,请参考Java
Laguage规范
。更具体地说,在第12.4节“类和接口的初始化”中,您将找到更多详细信息。
使用卡桑德拉准备语句时,将字段与静态值绑定是否有任何好处? 例如,即使我总是使用静态值“Active”,status是否也应该有一个bind变量?如果是,为什么? 更新用户设置status='Active',其中user_id=:userid
问题内容: Swift的最佳做法是什么? 选项1: 然后 选项2: 然后 问题答案: tl; dr 当您存储可变状态时的选项1(类或结构),因为您需要其他实例。 当您要存储静态变量时,可以使用选项2(作用域全局变量),因为它速度更快且使用的内存更少。 具有变量的Singleton类(或结构) 全球状态通常被认为是“坏事”。很难考虑,会引起问题,但有时是不可避免的。 如果您想拥有多个实例,请创建一个
问题内容: 单例与仅填充静态字段的类有何不同? 问题答案: 几乎每次我编写静态类时,我最终都希望自己将其实现为非静态类。考虑: 可以扩展非静态类。多态可以节省很多重复。 非静态类可以实现接口,当您要将实现与API分开时,该接口会派上用场。 由于这两点,非静态类使编写依赖它们的项目的更可靠的单元测试成为可能。 但是,单例模式距离静态类仅半步之遥。你_那种_得到这些好处,但如果你是直接与其它类中通过`
一、条件表达式if Scala 中的 if/else 语法结构与 Java 中的一样,唯一不同的是,Scala 中的 if 表达式是有返回值的。 object ScalaApp extends App { val x = "scala" val result = if (x.length == 5) "true" else "false" print(result) } 在 Ja
我有下面的代码块,希望使用Kotlin减少它。我该怎么做?
Kotlin 具有非常好的迭代函数,例如 或 ,但我无法(本地和非本地): 目标是尽可能接近函数语法来模仿通常的循环。这在一些旧版本的静态编程语言中肯定是可能的,但我很难重现语法。 问题可能是标签(M12)的错误,但我认为第一个示例无论如何都应该可以工作。 在我看来,我在某处读到过一个关于特殊技巧/注释的内容,但我找不到任何关于这个主题的参考资料。可能如下所示: