Why make an object for Main class, for the methods to work?
Why make an object for Main class, for the methods to work?
I was facing an error before, but when I made an object in this class the and called for the method, it worked flawlessly. Any explanation? Do I always have to make an object to call for methods outside of the main method (but in the same class)?
here:
public class A
public static void main(String args)
A myObj= new A();
System.out.println(myObj.lets(2));
public int lets(int x)
return x;
A.lets(2)
2 Answers
2
You need to understand static
. It associates a method or field to the class itself (instead of a particular instance of a class). When the program starts executing the JVM doesn't instantiate an instance of A
before calling main
(because main
is static
and because there are no particular instances of A
to use); this makes it a global and an entry point. To invoke lets
you would need an A
(as you found), or to make it static
(and you could also limit its' visibility) in turn
static
A
main
main
static
A
lets
A
static
private static int lets(int x)
return x;
And then
System.out.println(lets(2));
is sufficient. We could also make it generic like
private static <T> T lets(T x)
return x;
and then invoke it with any type (although the type must still override toString()
for the result to be particularly useful when used with System.out.println
).
toString()
System.out.println
There are a importance concept to consider an is static concept
. In your example you have to create an instance of your class because the main
method is static and it only
"operate" with other statics methods or variable
. Remember that when you instantiate a class you are creating a copy of that class an storing that copy in the instance variable, so as the copy (That was create inside of a static method in your case)
is also static so it can access the method which is not static in that context.
static concept
main
only
methods or variable
(That was create inside of a static method in your case)
In order to not create an instance and access to your method you need to make your lets method
static(due to the explanation abode)
lets method
public static int lets(int x)
return x;
And in your main you don't need to instantiate the class to access to this method.
public static void main(String args)
System.out.println(lets(2));
Check this guide about static in java: https://www.baeldung.com/java-static
Hope this help!
By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.
I'm afraid I don't understand your question. Are you asking why
A.lets(2)
doesn't work? If so, consider reading up on static methods, because that's what it sounds like you're going for.– Silvio Mayolo
Aug 27 at 2:19