3

我正在尝试编写一个让用户输入团队名称的代码。这是我的代码:

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();     
    }
}

我了解“无法从静态上下文中引用非静态变量名”。我知道,如果我将“静态”从主体中移除,那么它将起作用,但是:

a)如何在不删除“静态”的情况下引用它?

b)有没有办法让用户输入并将其直接分配给变量“名称”,即没有:

Scanner tn = new Scanner(System.in);
name = tn.nextLine(); 

我知道的基本问题,但我仍然是初学者!非常感谢,迈尔斯

4

5 回答 5

4

name是团队名称。所以你需要实例化一个新Team对象并设置它的名字:

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();     
}
于 2013-09-11T05:00:44.797 回答
4

static方法不允许直接使用非静态变量,因为non-static/instance变量是在创建对象时在内存中初始化的。因此,您需要创建该类的一个对象,然后使用该变量。做这样的事情:

Team teamObj = new Team();
//now access name variable using teabObj instance
teamObj.name = tn.nextLine();    
于 2013-09-11T05:01:21.497 回答
2

您可以按如下方式使用反射来访问该非静态字段。

    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));

反思的现场演示

或者你可以尝试如下。

   Team team = new Team();
   team.name = tn.nextLine();   

现场演示

于 2013-09-11T05:02:32.160 回答
0

静态方法/变量绑定到类。他们无法访问非静态变量(他们不知道应该调用该方法的哪个类实例)。您必须创建对象,然后调用非静态方法。

于 2013-09-11T06:48:33.057 回答
0

如果需要,可以创建一个 Team 对象。

Team team = new Team();
team.name = tn.nextLine();
于 2013-09-11T04:59:20.870 回答