2011-05-01 45 views
-1

在Java中,我可以保持一個變量從一個方法到另一個方法,並跨類?在Java中,我可以保存一個變量從一個方法到另一個方法,還是跨類?

我想從命令中獲取一個變量,在QandA中對其進行修改,並期望它持續到我再次修改它爲止。

public class Commands 
{ 
    int torch = 1; 
} 
_____________ 

public class QandA 
{ 
    Dostuff d = new Dostuff 
    Commands a = new Commands(); 
    public void torch 
{ 
    System.out.println("Torch = " + torch); 
    a.torch = 2; 
    System.out.println("Torch = " + torch); 
    d.dostuff(); 
} 
public class dostuff 
{ 
    public void dostuff() 
    { 
    // User imput is gathered here etc etc. 
    QandA(); 
    }  

}

因此,我期望輸出爲(一個循環)

火炬= 1

火炬= 2

火炬= 2

火炬= 2

火炬= 2

火炬= 2

後3個週期。 但它所做的是。

火炬= 1

火炬= 2

火炬= 1

火炬= 2

火炬= 1

火炬= 2

後三個週期。

請幫忙。

+1

只是一個迂腐點 - 因爲其他人已經巧妙地描述你的問題。 Luke總的來說,你想避免像你使用過的公共成員,因爲以後用業務邏輯(驗證等)封裝它們變得非常困難,並且處理線程安全。使用getters/setter,除非你非常確定這個類永遠是這個原語,總是在單個線程中使用,而不是被太多的類使用。只是一個指針。 – MJB 2011-05-01 04:22:24

回答

1

有與持久化數據沒有問題,但是你必須意識到你創造一個和保存。

在你的情況下,你在Command類作用域中聲明瞭「torch」,作爲Command初始化爲「1」的成員(我認爲語法有點搞笑)。因此,每當你聲明「new Command()」時,你就以一個新的「火炬」變量== 1開始。

你可以聲明「torch」爲靜態,這意味着它爲所有Command實例共享,然後它會像你想要的那樣工作,因爲每次構造函數被調用時它都不會被重置(假設你沒有在構造函數中將它設置爲1)。

+0

把我的代碼從一個大混亂轉變爲直接點是錯誤的。 :) – Luke 2011-05-01 04:24:38

+0

感謝您的幫助!我一直在爲此工作數小時。 :d – Luke 2011-05-01 04:25:13

1

我不確定你是如何引用像dostuff();和這樣的類[必須有這些編譯錯誤],但要記住只創建一個Command實例並傳遞相同的實例。在你的情況,每次創建QandA的一個實例,將創建一個Command實例與它的torch字段設置爲1

相關問題