I've been running into this problem many times and I never bothered to learn why its happening and learn what "static" actually means. I just applied the change that Eclipse suggested and moved on.
public class Member {
// Global Variables
int iNumVertices;
int iNumEdges;
public static void main(String[] args) {
// do stuff
iNumVertices = 0; // Cannot make a static reference to the non-static field iNumVertices
// do more stuff
} // main end
}
So eclipse tells me to do static int iNumVertices;
and I'm not sure why. So what exactly is "static", how is it used, what is the purpose of using "static", and why is it giving me this problem?
Here's your example:
public class Member {
// Global Variables
int iNumVertices;
int iNumEdges;
public static void main(String[] args) {
// do stuff
iNumVertices = 0; // Cannot make a static reference to the non-static field iNumVertices
}
}
The method main
is a static method associated with the class. It is not associated with an instance of Member
, so it cannot access variables that are associated with an instance of Member
. The solution to this is not to make those fields static. Instead, you need to create an instance of Member
using the new
keyword.
Here's a modified version:
public class Member {
// Fields
private int iNumVertices;
private int iNumEdges;
public Member(){
// init the class
}
public static void main(String[] args) {
Member member = new Member();
member.iNumVertices = 0;
// do more stuff
}
}
Finding yourself creating global statics is an indication to you that you should think carefully about how you're designing something. It's not always wrong, but it should tell you to think about what you're doing.