私人声明 Java
private statement Java
我是 Java 编程的超级新手。这是我的困惑。
public class Singleton
{
public static Singleton GetInstance()
{
if (sInstance == null)
{
sInstance = new Singleton();
}
return sInstance;
}
private Singleton()
{
// No code here
}
private static Singleton sInstance;
}
我想知道最后一个 private static Singleton sInstance
是做什么的?你不想在代码的开头声明它吗?
提前致谢。
sInstance
是一个 class 成员字段,声明为 static
。它与封闭的 class Singleton
属于同一类型。编译器无论在开头还是结尾都会接受它。
sInstance 是您要通过 GetInstance() return 的对象。如果 sInstance == null(因此尚未创建),则创建新对象,如果与之前创建的对象不同,则 returned。 Singleton 类型的 sInstance 对象是私有的,因此只有 public GetInstance() 方法可以 return 它(Singleton Class 中唯一的 public 访问方法)。这种设计模式不会让您创建多个由 sInstance 引用的 Singleton 对象实例。正如 Manouti 在之前的回复中所说,将它放在代码中的什么位置并不重要,但在开始时它的可读性更高。
这在静态字段和实例级方法的情况下工作正常,因为静态字段在 class 加载和初始化 阶段被解析和初始化。因此,实例级方法在访问静态字段时已经知道存在。
尝试对静态块/静态字段和实例块/实例字段做同样的事情(在声明之前访问)给出错误
static{
if (i == 0) { // error . i cannot be resolved
System.out.println("0");
}
}
static int i;
{
if (i == 0) { // error . i cannot be resolved
System.out.println("0");
}
}
int i;
因为 sInstance 是一个静态变量,这意味着无论在代码中的什么位置,您都可以访问它。将它放在代码的开头更具可读性,但无论哪种方式都有效。
我是 Java 编程的超级新手。这是我的困惑。
public class Singleton
{
public static Singleton GetInstance()
{
if (sInstance == null)
{
sInstance = new Singleton();
}
return sInstance;
}
private Singleton()
{
// No code here
}
private static Singleton sInstance;
}
我想知道最后一个 private static Singleton sInstance
是做什么的?你不想在代码的开头声明它吗?
提前致谢。
sInstance
是一个 class 成员字段,声明为 static
。它与封闭的 class Singleton
属于同一类型。编译器无论在开头还是结尾都会接受它。
sInstance 是您要通过 GetInstance() return 的对象。如果 sInstance == null(因此尚未创建),则创建新对象,如果与之前创建的对象不同,则 returned。 Singleton 类型的 sInstance 对象是私有的,因此只有 public GetInstance() 方法可以 return 它(Singleton Class 中唯一的 public 访问方法)。这种设计模式不会让您创建多个由 sInstance 引用的 Singleton 对象实例。正如 Manouti 在之前的回复中所说,将它放在代码中的什么位置并不重要,但在开始时它的可读性更高。
这在静态字段和实例级方法的情况下工作正常,因为静态字段在 class 加载和初始化 阶段被解析和初始化。因此,实例级方法在访问静态字段时已经知道存在。
尝试对静态块/静态字段和实例块/实例字段做同样的事情(在声明之前访问)给出错误
static{
if (i == 0) { // error . i cannot be resolved
System.out.println("0");
}
}
static int i;
{
if (i == 0) { // error . i cannot be resolved
System.out.println("0");
}
}
int i;
因为 sInstance 是一个静态变量,这意味着无论在代码中的什么位置,您都可以访问它。将它放在代码的开头更具可读性,但无论哪种方式都有效。