Cannot make a static reference to the non-static method fxn(int) from the type Two
Since the main
method is static
and the fxn()
method is not, you can't call the method without first creating a Two
object. So either you change the method to:
public static int fxn(int y) {
y = 5;
return y;
}
or change the code in main
to:
Two two = new Two();
x = two.fxn(x);
Read more on static
here in the Java Tutorials.
Cannot make a static reference to the non-static method
Since getText()
is non-static you cannot call it from a static method.
To understand why, you have to understand the difference between the two.
Instance (non-static) methods work on objects that are of a particular type (the class). These are created with the new like this:
SomeClass myObject = new SomeClass();
To call an instance method, you call it on the instance (myObject
):
myObject.getText(...)
However a static method/field can be called only on the type directly, say like this:
The previous statement is not correct. One can also refer to static fields with an object reference like myObject.staticMethod()
but this is discouraged because it does not make it clear that they are class variables.
... = SomeClass.final
And the two cannot work together as they operate on different data spaces (instance data and class data)
Let me try and explain. Consider this class (psuedocode):
class Test {
string somedata = "99";
string getText() { return somedata; }
static string TTT = "0";
}
Now I have the following use case:
Test item1 = new Test();
item1.somedata = "200";
Test item2 = new Test();
Test.TTT = "1";
What are the values?
Well
in item1 TTT = 1 and somedata = 200
in item2 TTT = 1 and somedata = 99
In other words, TTT
is a datum that is shared by all the instances of the type. So it make no sense to say
class Test {
string somedata = "99";
string getText() { return somedata; }
static string TTT = getText(); // error there is is no somedata at this point
}
So the question is why is TTT static or why is getText() not static?
Remove the static
and it should get past this error - but without understanding what your type does it's only a sticking plaster till the next error. What are the requirements of getText()
that require it to be non-static?
JAVA - Cannot make a static reference to the non-static method
In order to use the User
method in a static context (main
method for the example), you need to instantiate the lookFor class and call the User
method on that object :
lookFor look = new lookFor(); // Use appropriate constructor
if(look.User(username, users) == -1) {
...
}
Method Reference. Cannot make a static reference to the non-static method
Method references to non-static methods require an instance to operate on.
In the case of the listFiles
method, the argument is a FileFilter
with accept(File file)
. As you operate on an instance (the argument), you can refer to its instance methods:
listFiles(File::isHidden)
which is shorthand for
listFiles(f -> f.isHidden())
Now why can't you use test(MyCass::mymethod)
? Because you simply don't have an instance of MyCass
to operate on.
You can however create an instance, and then pass a method reference to your instance method:
MyCass myCass = new MyCass(); // the instance
test(myCass::mymethod); // pass a non-static method reference
or
test(new MyCass()::mymethod);
Edit: MyCass
would need to be declared static (static class MyCass
) in order to be accessible from the main method.
cannot make a static reference to a non static method
A static method belongs to the class, a non-static method belongs to an instance of the class.
When you call getCurrentValue()
from main
, you get an error because main
isn't associated with any instance.
You need to create an instance of the class:
HallLanceMemoryCalculator me = new HallLanceMemoryCalculator();
Then you can call the instance's getCurrentValue()
:
double value = me.getCurrentValue();
JAVA cannot make a static reference to non-static field
You are calling instance methods and fields from within a static method, something that can't be done because instance fields and methods don't exist without an object, and inside of the main method there is not this
object. You must instead create an instance of the class, and then call the methods on the instance.
public class Cerchio{
float r;
float area;
float cfr;
final double pi = 3.14;
public static void main(String[] args){
System.out.println("CIRCLE PROGRAM\n");
Cerchio cerchio = new Cerchio();
cerchio.r = 5;
cerchio.c_cfr();
cerchio.c_area();
System.out.ptintln("The cir is: " + cerchio.cfr);
System.out.println("The area is: " + cerchio.area);
}
float c_cfr(){
cfr =(float)(2 * pi * r); //casting
return cfr;
}
float c_area(){
area = (float)(pi * (r*r));
return area;
}
}
Lots of other problems,...
- You're accessing class fields directly, something that shouldn't be done. Instead, the fields should be private and you should use getters/setters/contructor parameters to get, set and set the fields.
- Your code is unindented making it very hard to read and understand.
Please search this site as this same question has been asked and answered a gabizillion times, and most likely there's an answer out there that is much better than mine. If found, then this question should be closed as a duplicate.
Edit
You state:
I didn't understand "Instead, the fields should be private and you should use getters/setters/contructor parameters to get, set and set the fields." I should write private float c_cfr() ?
Your fields are:
float r;
float area;
float cfr;
This is really not a field but a constant:
final double pi = 3.14;
and can be replaced / improved by simply using Math.PI.
Your fields should be changed to:
private float r;
private float area;
private float cfr;
and you should only access them via public getter and setter methods, and only if absolutely necessary.
How to solve Cannot Make Static Reference to Non-Static Method in a Java mastermind game?
You can't call a non-static method directly from a static method. in public static main(String [] args)
To do so, you should first create an object of the class.
try this at main method:
mm m1 = new mm();
random = m1.numberGenerator();
int [] guess = m1.userInput();
this should work
how to solve cannot make a static reference to the non-static method?
(If your class name is Main
then) use Main.class.getResource
instead of this.getClass.getResource
Read this for more details.
Java-Cannot make a static reference to the non-static field
You probably intended to access the instance variable of the instance you created :
phone xy = new phone();
int y = xy.x;
Since x
is not a static variable it can't be accessed without specifying an instance of the phone
class.
Of course this will also fail, unless you change the access level of x
to public
(which is possible but not advisable - you should use getter and setter methods instead of directly manipulating instance variables from outside the class).
Related Topics
Difference Between an Application Server and a Servlet Container
Why Is This Java Code in Curly Braces ({}) Outside of a Method
Sessiontimeout: Web.Xml VS Session.Maxinactiveinterval()
How to Disable the Default Console Handler, While Using the Java Logging API
Itext - Add Content to Existing PDF File
Maximum Amount of Memory Per Java Process on Windows
Spring Session-Scoped Beans (Controllers) and References to Services, in Terms of Serialization
Collections.Synchronizedlist and Synchronized
How to Use the Jersey JSON Pojo Support
Stop Scheduled Timer When Shutdown Tomcat
User Authentication on a Jersey Rest Service
Why Does Intellij Give Me "Package Doesn't Exist" Error
String Replacement in Java, Similar to a Velocity Template
When Should an Illegalargumentexception Be Thrown