2016-04-16 42 views
-3

我寫下了一個簡單的程序來演示靜態關鍵字的使用。我還輸入了一個方法來計算變量的平方,並初始化了主類中靜態變量的值。如何將靜態變量的值傳遞給方法?

class staticdemo{ 
public static int stvar; 

void square(int stvar){ 
    System.out.println("" + stvar*stvar); 
} 

} 
public class statictest { 
public static void main(String args[]){ 
    staticdemo.stvar = 10; 
int s = staticdemo.stvar; 
    square(s); //HERE IS WHERE I GET THE ERROR! 
} 
} 

確切的錯誤我得到的是「法方(INT)是未定義statictest類型」

我怎樣才能用一個靜態變量執行的方法是什麼?

+0

__JavaScript__ ??? – Rayon

+0

用正確的代碼標籤標記問題,你會得到一些答案。這不是Javascript。 – Dominofoe

+0

應該是'staticdemo.square'而不是'square'。我投票結束這個低質量的問題。 – Everv0id

回答

0

的問題不在於你傳遞一個靜態字段(不變量)到方法。這就是你正試圖調用一個沒有實例的實例方法。

或者:

  1. squarestatic爲好,這樣你就可以從main調用它,或

  2. main創建一個實例來調用它:

    new staticdemo().square(staticdemo.stvar); 
    

我也強烈推薦您不要爲靜態字段(stvar)和功能參數(square中的stvar)使用相同的名稱。這只是要求混亂和麻煩。

還建議遵循標準的Java命名約定,即使在您自己的測試代碼中,但特別是在向他人請求幫助時。

因此,或許:

class StaticDemo { 
    public static int stvar; 

    public static void square(int s) { 
    //  ^^^^^^    ^
     System.out.println("" + s * s); 
    //      ^^
    } 
} 

public class StaticTest { 
    public static void main(String args[]) { 
     StaticDemo.square(StaticDemo.stvar); 
    // ^^^^^^^^^^^  ^^^^^^^^^^^^^^^^ 
    } 
} 

或者交替:

class StaticDemo { 
    public static int stvar; 

    public void square(int s) { 
    //     ^
     System.out.println("" + s * s); 
    //      ^^
    } 
} 

public class StaticTest { 
    public static void main(String args[]) { 
     new StaticDemo().square(StaticDemo.stvar); 
    // ^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^ 
    } 
} 
0

你的方法也應該是靜態的

0

這個方法必須是靜態的

void square(int stvar),如果你想從一個靜態的背景下

稱之爲另一個更優雅和OOP方式是通過聲明爲私有聲明一個類的對象,封裝及其成員

public static void main(String args[]){ 
    staticdemo.stvar = 10; 
    int s = staticdemo.stvar; 
    staticdemo foo = new staticdemo(); 

    foo.square(s); //HERE will work fine! 
} 
0

你不能直接調用非靜態方法。你必須爲staticdemo類創建一個對象,然後你可以使用oobject調用該方法。 主要方法裏面輸入 staticdemo st = new staticdemo(); st.square(s);