簡體   English   中英

如何從靜態上下文引用非靜態變量名?

[英]How to reference non-static variable name from static context?

我正在嘗試編寫一個允許用戶輸入團隊名稱的代碼。 這是我的代碼:

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

我知道的基本問題,但我還是初學者! 非常感謝,邁爾斯

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

static方法不允許直接使用非靜態變量,因為在創建對象時在內存中初始化non-static/instance變量。 因此,您需要創建該類的對象,然后使用該變量。 做這樣的事情:

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

您可以按如下方式使用反射來訪問該非靜態字段。

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

現場演示

如果需要,創建一個Team對象。

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

靜態方法/變量綁定到類。 他們無法訪問非靜態變量(他們不知道應該在哪個類實例中調用該方法)。 您必須創建對象,然后調用非靜態方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM