簡體   English   中英

主要方法之外的方法中的Java調用對象

[英]Java calling object in method outside of main

我有一個簡單的問題,我已經堅持了一段時間,我找不到答案。 基本上,我正在創建一個對象並嘗試訪問變量而不使用靜態變量,因為我被告知這是錯誤的方法。 以下是該問題的一些示例代碼。 我在第一個類中收到一個無法解析為變量的錯誤。 我希望能夠做的是在main之外的其他方法中訪問t.name ,以及在其他類中也是如此。 為了解決這個問題,我將使用Test2.name並在Test2類中使變量為static,如果我錯了,請糾正我,但我認為這是錯誤的方法。 任何幫助將不勝感激=)

public class Test {
  public static void main(String[] args) {
    Test2 t = new Test2("Joe");         
  }

  public void displayName() {
    System.out.println("Name2: " + t.name);
  }
}

public class Test2 {
  String name;

  public Test2 (String nm) {
    name = nm;
  } 
}

我看到其他人已經發布了代碼片段,但是他們實際上沒有發布為什么這樣做有用(在撰寫本文時)。

您收到編譯錯誤的原因是在您的方法中

public static void main(String[] args) {

    Test2 t = new Test2("Joe");         
}

變量t的范圍就是那種方法。 您將Test2 t定義為僅在main(String[] args)方法中,因此您只能在該方法中使用變量t 但是,如果您要將變量設為字段(如此),並創建Test類的新實例,

public class Test {
Test2 t;
public static void main(String[] args) {
    Test test = new Test();
    test.t = new Test2("Joe");  
   test.displayName();
}

public void displayName() {
    System.out.println("Name2: " + t.name);
}
}

然后您不應再收到任何編譯錯誤,因為您聲明變量t在類Test范圍內。

您可以將測試對象的引用作為方法displayName的參數:

public class Test {

    public static void main(String[] args) {    
        Test2 t = new Test2("Joe");         
        displayName(t);
    }

    public static void displayName(Test2 test) {
        System.out.println("Name2: " + test.name);
    }
}

注意:我還將displayName靜態方法。 main方法中,您只能訪問靜態方法而無需引用。

將Test類修改為此

public class Test {
  private static Test2 t;

  public static void main(String[] args) {
    t = new Test2("Joe");         
  }

  public void displayName() {
    System.out.println("Name2: " + t.name);
  }
}

為您的目的使用getter 這是您的問題的一個側面解決方案,但通常這是您應該如何使用getter檢索實例變量。

public class Test {


public static void main(String[] args) {

    Test2 t = new Test2("Joe");         
    displayName(t);
}

public static void displayName(Test2 test) {
    System.out.println(test.getName());
}
}



public class Test2 
{
private String name;

public Test2 (String nm)
{
    name = nm;
}   

public String getName()
{
     return name;
}
}

永遠記住,班級中的變量應該是private 這可以保護它免受來自課外的訪問。 因此, getter是訪問它們的唯一方法。 並使用setterconstructor初始化它們。

我認為越少靜電越好。
我將實例化Test並在其實例上調用displayName,然后將Test2的實例傳遞給displayName。 但這取決於總體目標是什么

暫無
暫無

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

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