2013-02-22 172 views
2

對於專家來說這是一個非常簡單的問題,但對於像我這樣的初學者來說,這只是令人困惑。我以爲我理解靜態,但顯然我不知道。這下面是整個班級,它說我需要做靜態測試。但我不想。我能做些什麼來解決這個問題,爲什麼它首先發生?謝謝!靜態變量不需要

public class SubstringTest 
{ 
    private String test; 

    public static void main(String[] args) 
    { 
     test = "Penguin"; 
     System.out.println(test); 
     System.out.println(test.substring(3)); 

    } 

} 
+0

private static String test; – smk 2013-02-22 02:54:57

+0

主要是一個靜態方法。而且你只能訪問靜態方法中的靜態成員。 – smk 2013-02-22 02:55:36

+0

[爲什麼main方法在java中是靜態的]可能的重複(http://stackoverflow.com/questions/3181207/why-main-method-is-static-in-java) – 2013-02-22 02:57:17

回答

9

main是靜態的。 test不是。

如果您不想讓test爲靜態,您必須首先創建一個實例SubstringTest

SubstringTest st = new SubstringTest(); // create an instance 
st.test = "test"; // this works 
System.out.println(st.test); // also works 

如果test是靜態的,你可以做

SubstringTest.test = "test"; 

或者,如果你正在寫的代碼是在類SubstringTesttest是靜態的:

test = "test"; 
+0

SubstringTest的實例? – Evorlor 2013-02-22 02:57:21

+0

@SamuelKnox更新回答 – Doorknob 2013-02-22 03:00:23

+0

gotcha謝謝門把手!那就是我對靜態的理解,這就是爲什麼我感到困惑。現在它是有道理的! – Evorlor 2013-02-22 03:00:54

5

靜態方法不能訪問非靜態/實例變量,因爲靜態方法永遠不會與任何實例相關聯。靜態方法不能直接調用非靜態變量。但靜態方法可以通過聲明實例並使用它們來訪問非靜態變量。

public class SubstringTest 
{ 
private String test; // make it private static String test; 

public static void main(String[] args) 
{ // SubstringTest t = new SubstringTest(); Or change here. 
    // t.test ="Penguin"; 
    test = "Penguin"; 
    System.out.println(test); 
    System.out.println(test.substring(3)); 

} 

} 
4

不能從訪問來自Static方法的實例變量。

因爲在類實例上調用靜態方法而不是類的對象。這意味着,一個靜態方法不能訪問實例變量,因爲它們只是在一個對象中被實例化。