Reputation: 405
I am trying to write a code that lets the user enter a team name. Here is my code:
public class Team {
public String name;
public static void main(String[] args) {
System.out.println("Enter name team");
Scanner tn = new Scanner(System.in);
name = tn.nextLine();
}
}
I understand that "non-static variable name cannot be referenced from a static context". I know that if I take the "static" away from the main then it will work, but:
a) How can I reference it without taking the "static" out?
b) Is there a way to get the users input and assign it straight to the variable "name" i.e. without the:
Scanner tn = new Scanner(System.in);
name = tn.nextLine();
Basic questions I know, but I am still a beginner! Many thanks, Miles
Upvotes: 3
Views: 9562
Reputation: 11433
Static methods/variables are bound to class. They have no access to non-static variables ( they have no idea on which instance of class they should call the method). You have to create object, and then call the non-static method.
Upvotes: 0
Reputation: 35557
You can use reflection as follows to access that non static field.
System.out.println("Enter name team");
Scanner tn = new Scanner(System.in);
Team team=new Team();
Field field=Team.class.getField("name");
field.set(team,tn.next());
System.out.println((String) field.get(team));
Live demo for reflection.
Or you can try as follows.
Team team = new Team();
team.name = tn.nextLine();
Live demo
Upvotes: 2
Reputation: 1646
Create a Team object if you want.
Team team = new Team();
team.name = tn.nextLine();
Upvotes: 0
Reputation: 68715
static
methods do not allow to use the non-static variables directly because non-static/instance
variables are initialized in memory on object creation. Hence you need to create an object of the the class and then use the variable. Do something like this:
Team teamObj = new Team();
//now access name variable using teabObj instance
teamObj.name = tn.nextLine();
Upvotes: 4
Reputation: 7439
name
is a team name. So you need to instantiate a new Team
object and set its name :
public static void main(String[] args) {
System.out.println("Enter name team");
Scanner tn = new Scanner(System.in);
Team team = new Team();
team.name = tn.nextLine();
}
Upvotes: 4