问题
如果变量声明为public static varName;,那么我可以从任何位置访问asClassName.varName。我也知道静态成员由类的所有实例共享,并且不会在每个实例中重新分配。
声明变量asprivate static varName;与声明变量private varName;有什么不同?
在这两种情况下,它都无法从任何其他类访问为ClassName.varName或asClassInstance.varName。
将变量声明为静态会给它带来其他特殊属性吗?
#1 热门回答(97 赞)
当然,它可以被访问为ClassName.var_name,但只能从定义它的类中进行访问 - 这是因为它是private。
public staticorprivate static变量通常用于常量。例如,许多人不喜欢在代码中"硬编码"常量;他们喜欢使用有意义的名称制作apublic static或private static变量,并在其代码中使用它,这应该使代码更具可读性。 (你也应该做这样的常量final)。
例如:
public class Example {
private final static String JDBC_URL = "jdbc:mysql://localhost/shopdb";
private final static String JDBC_USERNAME = "username";
private final static String JDBC_PASSWORD = "password";
public static void main(String[] args) {
Connection conn = DriverManager.getConnection(JDBC_URL,
JDBC_USERNAME, JDBC_PASSWORD);
// ...
}
}
你是否想让变量在课堂外可见,取决于你是否希望变量能够在课堂外看到.public或private取决于你是否希望变量在课堂外可见。
#2 热门回答(88 赞)
静态变量对于类的所有实例都具有单个值。
如果你要做的事情如下:
public class Person
{
private static int numberOfEyes;
private String name;
}
然后你想改变你的名字,这很好,我的名字保持不变。如果你想改变它以便你有17只眼睛,那么世界上每个人也会有17只眼睛。
#3 热门回答(42 赞)
私有静态变量的使用方式与私有实例变量的用法相同:它们存储的状态只能由同一个类中的代码访问。可访问性(私有/公共/等)和变量的实例/静态性质是完全正交的概念。
我会避免将静态变量视为在类的"所有实例"之间共享 - 这表明必须至少存在一个状态才能存在。否 - 静态变量与类型本身相关联,而不是与类型的任何实例相关联。
因此,只要你想要某个与该类型相关联的状态而不是任何特定实例,并且你希望将该状态保持为私有(例如,允许通过属性进行受控访问),那么拥有私有静态变量是有意义的。
顺便说一句,我强烈建议你公开(甚至非私有)的变量只是常量 - 不可变类型的静态最终变量。其他所有内容都应该是私有的,以便分离API和实现(以及其他内容)。