patternjavaCritical
What does the 'static' keyword do in a class?
Viewed 0 times
classthedoesstaticwhatkeyword
Problem
To be specific, I was trying this code:
But it gave the error
Cannot access non-static field in static method main
So I changed the declaration of
And it worked. What does it mean to put that keyword before the declaration? What exactly will it do and/or restrict in terms of what can be done to that object?
package hello;
public class Hello {
Clock clock = new Clock();
public static void main(String args[]) {
clock.sayTime();
}
}But it gave the error
Cannot access non-static field in static method main
So I changed the declaration of
clock to this:static Clock clock = new Clock();And it worked. What does it mean to put that keyword before the declaration? What exactly will it do and/or restrict in terms of what can be done to that object?
Solution
static members belong to the class instead of a specific instance.It means that only one instance of a
static field exists[1] even if you create a million instances of the class or you don't create any. It will be shared by all instances.Since
static methods also do not belong to a specific instance, they can't refer to instance members. In the example given, main does not know which instance of the Hello class (and therefore which instance of the Clock class) it should refer to. static members can only refer to static members. Instance members can, of course access static members.Side note: Of course,
static members can access instance members through an object reference.Example:
public class Example {
private static boolean staticField;
private boolean instanceField;
public static void main(String[] args) {
// a static method can access static fields
staticField = true;
// a static method can access instance fields through an object reference
Example instance = new Example();
instance.instanceField = true;
}[1]: Depending on the runtime characteristics, it can be one per ClassLoader or AppDomain or thread, but that is beside the point.
Code Snippets
public class Example {
private static boolean staticField;
private boolean instanceField;
public static void main(String[] args) {
// a static method can access static fields
staticField = true;
// a static method can access instance fields through an object reference
Example instance = new Example();
instance.instanceField = true;
}Context
Stack Overflow Q#413898, score: 656
Revisions (0)
No revisions yet.