![](/img/trans.png)
[英]Java: Calling Object in Method Outside of Main with Static Methods
[英]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
是訪問它們的唯一方法。 並使用setter
或constructor
初始化它們。
我認為越少靜電越好。
我將實例化Test並在其實例上調用displayName,然后將Test2的實例傳遞給displayName。 但這取決於總體目標是什么
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.