Reputation: 2086
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);
}
}
This java program contains a static variable. But I cannot understand the difference between public and private static variables.
Upvotes: 13
Views: 125472
Reputation: 3717
Employee employee = new Employee();
System.out.println(Employee.DEPARTMENT);
in static there will be only one instance of DEPARTMENT passed to every instance of Employee. in non-static, every instance of Employee will have their own instance of DEpARTMENT.
if DEPARTMENT is non-static i.e
public final String DEPARTMENT = Development
only way to access DEPARTMENT will be
System.out.println(employee.DEPARTMENT);
Upvotes: 0
Reputation: 326
public static
- can be accessed from within the class as well as outside the class.
private static
- can be access from within the class only.
Static's are considered to be anti-OO in OOPS.
class Dog
{
public static string X;
private static string y;
}
y
can be accessed only from inside Dog
via either Dog.y
or just y
.
X
can be accessed anywhere via Dog.X
or, if you're either in the class or using using static Dog
as a header, just X
.
Upvotes: 4
Reputation: 1500065
A public variable is accessible everywhere in the code - a private variable is only accessible within the class itself. In this case you're using Employee.salary
within the Employee
class, so that's fine.
Note that the variable being static is a completely separate matter - and methods and classes have accessibility in the same way as variables.
There are other levels of access available too - protected
and the default "package" access (which can't be specified explicitly). See section 6.6 of the Java Language Specification for more details.
(As a side matter, it's also worth learning about what static
means - you almost certainly don't want these variables to be statics, as they apply to each Employee
rather than the Employee
concept in general. It's odd for DEPARTMENT
to be a constant here, too.)
Upvotes: 28
Reputation: 7375
private static double salary
is available only within the class and can be accessed as
salary or Employee.salary
While
public static final String DEPARTMENT
Could be accessed from outside of this class too as follows
Employee.DEPARTMENT
Upvotes: 4
Reputation: 23455
A public
variable is accessible from anywhere (well, anywhere where the class is accessible).
A private
variable is only accessible inside the class.
A static
variable belongs to the class rather than to an instance of a class.
Notice that the variable DEPARTMENT
is also final
, which means that it cannot be modified once it is set. This is important here because that's what saves this from being bad code -- the variable is a constant so it's okay to give things outside the class access to it.
Upvotes: 31
Reputation: 21831
Obviously, you cannot access private
static variable from outside the class, and you can access public
static variable from everywhere.
Upvotes: 1