2013-10-08 65 views
0

我在Java中遇到問題。
我對Java真的很陌生,所以不要怪我怪異的代碼和東西。如何在靜態方法中使用實例變量

我正在製作一個小的thingymabob,它隨機生成數字並使用它們來創建關於由該信息勾畫的隨機生成樹的信息。
問題是,我需要做一個靜態的void來打印樹的統計信息。

但是我所有的變量 - 「treeheight」,「treetrunkwidth」等 - 都不能是靜態的,或者每一個可變的信息片段都會返回0或爲空。這很令人討厭,因爲如果我打印出的樹狀統計數字不是靜態的,那麼它就不會顯示出來,但是如果我將其設置爲靜態,它將不會讓樹的信息隨意生成並隨意更改。

我該怎麼辦?

-AndeX

+0

首先,你應該發佈您的代碼。然後我們將看到我們可以做什麼... – BlackHatSamurai

+0

你想要一些信息與對象關聯,然後實例化對象並使用。 – Gireesh

+0

你需要顯示一些代碼。但是,這可能歸結爲在某個地方放置了新的thingymabob()。 – Thilo

回答

1

那樣簡單

1:靜態成員可以與類引用來訪問

ClassName.staticVar 

2:非靜態成員可以通過實例來訪問參考

new CLassName() 

現在如果您可以請發佈您的代碼,我們可以給出確切的建議

+0

我認爲Andex想通過不使用「new」來調用實例變量。 – Rudy

+1

這沒有意義。實例變量就是對象的「實例」。你不能那樣做。 – BlackHatSamurai

0

裏面Thingymabob您可以創建

public static void main(String[] argsIgnored) { 
    Thingymabob anInstance = new Thingymabob(); 
    anInstance.doStuffToSetItUp()... 
    System.out.println("treeheight = " + anInstance.getTreeheight()); 
    System.out.println("treetrunkwidth = " + anInstance.getTreetrunkwidth()); 
    etc... 
} 
0

我想你在找什麼是Java Singleton Class。我推薦你look here for more information

這將意味着你將只有一個你的類的實例Thingymabob,你可以像平常一樣通過getters and setters訪問它的屬性。

這是constructorgetInstance會是什麼樣子:

private Thingymabob() { 
    // Exists only to defeat instantiation. 
} 

public static Thingymabob getInstance() { 
    if(instance == null) { 
     instance = new Thingymabob(); 
    } 
    return instance; 
} 

你會再訪問你的所有其他類,像這樣:

所有的
Thingymabob thingy = Thingymabob.getInstance(); 
相關問題