Recently, while writing a java program, I got the classic Java error:
non-static method cannot be referenced from a static context.
No doubt, other young java practitioners have had this error.
Here, I’ve laid out a simple program, with explanations, so that you can avoid the problem. Voila:
public class StaticIssues
{
// At top of the class, only declare the global object
// to be seen in the entire class
objCount theCount = new objCount();
// do not run any code here, such as:
// System.out.println ( "top of class" );
// or
// theCount.returnCount();
// constructor of the class StaticIssues
public StaticIssues ()
{ // In Constructor, initialize the objects
// including the other objects, such as
// instances of sub Object objCount
theCount.initCount ();
System.out.println ("StaticIssues () Constructor" );
// note that this code will run without this constructor
} // end constructor
// code for sub-object objCount
// no brackets at the end of this declaration. ie. objCount ()
public class objCount
{
// declare integer within class
// not globally
private int theCount = 0;
public void initCount ()
{ theCount = 0;
}
public void incrementCount ()
{ theCount ++;
}
public int returnCount()
{ return theCount;
} // end returnCount()
} // end class objCount
// other methods can use the object
public void someMethod ()
{
// In other methods, use the instance of the object
// and call the methods of the object
theCount.incrementCount ();
System.out.print ( "In someMethod ()." );
System.out.println ( " theCount.returnCount() is now: " +
theCount.returnCount() );
// However, do not reference the object itself. ie.
// objCount.incrementCount () ;
// otherwise, you get the famous:
// line number of the error, followed by
// error: non-static method incrementCount() cannot be
// referenced from a static context
// objCount.incrementCount () ;
// 1 error
} // end someMethod ()
public static void main(String []args)
{
// within main, create object
StaticIssues objInstance = new StaticIssues ();
// reference the object.
System.out.println ( "objInstance.theCount.returnCount () is: "
+ objInstance.theCount.returnCount () );
objInstance.someMethod();
// Note that from the main class
// you have to prefix the references by the
// object declared in the main class,
// here, objInstance
System.out.println ( "objInstance.theCount.returnCount () is: "
+ objInstance.theCount.returnCount () );
} // end main
} // end class StaticIssues
Output:
StaticIssues () Constructor
objInstance.theCount.returnCount () is: 0
In someMethod (). theCount.returnCount() is now: 1
objInstance.theCount.returnCount () is: 1
I’m sure that these guidelines will not solve EVERY occurrence of this error. And that there can be improvements to the program. But as I’ve written before, there is nothing a like good design and coding correctly in the first place.
Feel free to use this as a start.