Difference between public static and private static variables
Asked Answered
C

6

12
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.

Coreencorel answered 5/5, 2012 at 6:29 Comment(0)
P
28

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.)

Previous answered 5/5, 2012 at 6:32 Comment(7)
I donot think we ever need private static variablesPuppetry
@Sameer: I completely disagree. While I tend to dislike static variables in general, I would certainly not claim that they're never needed. Are the only static variables that you ever use constants? (Even constants can be better off as private, sometimes...)Previous
@JonSkeet If I use private static variable then will it get memory when app(Android App for example) gets started even though class not instantiate? as like public static variable gets memory?Swinger
@Dharmendra: Yes, public/private makes no difference in terms of memory.Previous
@AustinWBryan: Just because a word can be used as a keyword doesn't mean it should always be specified in code font in Markdown. In this case, both public and static make more sense to be read as regular words, IMO.Previous
@JonSkeet Okay, thanks, I'll consider that next time. So when should a keyword be used in code markdown?Lifeguard
@AustinWBryan: When you're referring to the keyword rather than the concept, basically. Sometimes it's a grey area thoguh.Previous
C
31
  • 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.

Clunk answered 5/5, 2012 at 6:36 Comment(1)
GREAT.I have a confusion on final.Coreencorel
P
28

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.)

Previous answered 5/5, 2012 at 6:32 Comment(7)
I donot think we ever need private static variablesPuppetry
@Sameer: I completely disagree. While I tend to dislike static variables in general, I would certainly not claim that they're never needed. Are the only static variables that you ever use constants? (Even constants can be better off as private, sometimes...)Previous
@JonSkeet If I use private static variable then will it get memory when app(Android App for example) gets started even though class not instantiate? as like public static variable gets memory?Swinger
@Dharmendra: Yes, public/private makes no difference in terms of memory.Previous
@AustinWBryan: Just because a word can be used as a keyword doesn't mean it should always be specified in code font in Markdown. In this case, both public and static make more sense to be read as regular words, IMO.Previous
@JonSkeet Okay, thanks, I'll consider that next time. So when should a keyword be used in code markdown?Lifeguard
@AustinWBryan: When you're referring to the keyword rather than the concept, basically. Sometimes it's a grey area thoguh.Previous
M
3
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
Monzon answered 5/5, 2012 at 6:38 Comment(0)
H
3

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.

Heavyarmed answered 22/4, 2015 at 12:34 Comment(0)
J
1

Obviously, you cannot access private static variable from outside the class, and you can access public static variable from everywhere.

Judicious answered 5/5, 2012 at 6:31 Comment(3)
Have a look again.The variable salary is private.but if it is private how can the this line" public static void main(String args[]){ salary = 1000;" access salary?Coreencorel
@Androidmaid: Because you're accessing it from within the same class (Employee).Previous
with today computer/technology, a small amt of memory wont do any harmDasha
D
0
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);
Dennis answered 23/4 at 8:3 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.