class Employee{
// salary variable is a private static variable
private static double salary;
// DEPARTMENT is a constant
public static final String DEPARTMENT = "Development";
public static void main(String args[]){
salary = 1000;
System.out.println(DEPARTMENT+ " average salary:"+salary);
}
}
这个java程序包含一个静态变量。但我无法理解公共静态变量和私有静态变量之间的区别。
public
变量可以从任何地方访问(好吧,任何可以访问类的地方)。private
变量只能在类内部访问。A
static
变量属于类而不是类的实例。注意变量
DEPARTMENT
也是final
,这意味着一旦设置就无法修改。这在这里很重要,因为这可以避免成为糟糕的代码——变量是一个常量,所以可以让类外部的东西访问它。公共变量可以在代码中的任何地方访问 - 私有变量只能在类本身内访问。在本例中,您在
Employee.salary
类中使用 Employee
,所以没问题。
请注意,变量是静态的是完全独立的事情 - 方法和类具有与变量相同的可访问性。
还有其他级别的访问权限 -
protected
和默认的“包”访问权限(无法明确指定)。有关更多详细信息,请参阅 Java 语言规范第 6.6 节。
(顺便说一句,还值得了解
static
的含义 - 您几乎肯定 不 希望这些变量是静态的,因为它们适用于 each Employee
而不是 Employee
概念一般来说,DEPARTMENT
在这里也是一个常数,这很奇怪。)
private static double salary
仅在班级内可用,并且可以通过以下方式访问:
salary or Employee.salary
同时
public static final String DEPARTMENT
也可以从此类外部访问,如下所示
Employee.DEPARTMENT
public static
- 可以在课堂内和课堂外访问。
private static
- 只能从班级内部访问。
静态在 OOPS 中被认为是反 OO 的。
class Dog
{
public static string X;
private static string y;
}
y
只能从 Dog
内部通过 Dog.y
或仅通过 y
访问。
X
可以通过 Dog.X
在任何地方访问,或者,如果您在课堂上或使用 using static Dog
作为标题,只需 X
。
显然,你不能从类外部访问
private
静态变量,但你可以从任何地方访问public
静态变量。
Employee employee = new Employee();
System.out.println(Employee.DEPARTMENT);
在 static 中,只有一个 DEPARTMENT 实例传递给 Employee 的每个实例。 在非静态中,每个 Employee 实例都会有自己的 DEpARTMENT 实例。
如果 DEPARTMENT 是非静态的,即
public final String DEPARTMENT = Development
访问 DEPARTMENT 的唯一方法是
System.out.println(employee.DEPARTMENT);