如何从静态上下文引用非静态变量名?

时间:2013-09-11 04:53:44

标签: java

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

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)有没有办法让用户输入并直接将其分配给变量“name”,即没有:

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

基本问题我知道,但我还是初学者! 非常感谢, 英里

5 个答案:

答案 0 :(得分: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();     
}

答案 1 :(得分:4)

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

Team teamObj = new Team();
//now access name variable using teabObj instance
teamObj.name = tn.nextLine();    

答案 2 :(得分: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));

直播demo进行反思。

或者你可以尝试如下。

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

直播demo

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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