關於static method的解釋 想要解決上面的報錯,我們首先需要瞭解什麼叫做static method(靜態方法)。 靜態方法為類所有,一般情況下我們通過類來使用(而對於不加static的實例方法我們則只能通過對象的來調用)。 以下我們通過一些代碼的例子來對此進行說明: ## 在同一類裡面調用 ...
關於static method的解釋
想要解決上面的報錯,我們首先需要瞭解什麼叫做static method(靜態方法)。
靜態方法為類所有,一般情況下我們通過類來使用(而對於不加static的實例方法我們則只能通過對象的來調用)。
以下我們通過一些代碼的例子來對此進行說明:
在同一類裡面調用靜態方法與實例方法的區別:
點擊查看代碼
public class Main{
public static viod main(String[] args){
//Test01();//直接調用Test01會報Non-static method xx cannot be referenced from a static context.
//用如下方式調用Test01
Main m=new Main();
m.Test01();
//Test02可以直接調用,通過類
Main.Test02();
}
public viod Test01(){
System.out.println("此方法為非靜態方法")
}
public static viod Test02(){
System.out.println("此方法為靜態方法")
}
}
通過上面的代碼不難看出我們的**main()方法是靜態的**,如果要在 main() 方法中調用本類中的其他方法,則該方法也必須是靜態的,否則需要先創建本類的實例對象,然後再通過對象調用該成員方法。
在不同類裡面調用靜態方法與實例方法的區別:
點擊查看代碼
public class Main{
public static viod main(String[] args){
TestNonStatic.Test01();//會報錯,不能直接引用其他類的非靜態方法
TestNonStatic testnonstatic=new TestNonStatic();
TestNonStatic.Test01;//依然可以通過創建一個實體對象來訪問。
TestNonStatic.Test02();
}
}
class TestNonStatic{
viod Test01(){
System.out.println("其他類中的實例方法")
}
static void Test02(){
System.out.printlin("其他類中的靜態方法")
}
}
通過以上代碼不難看出靜態方法與實例方法的主要區別在於是否需要創建一個對象來引用所對應的方法。只要滿足封裝的條件在同一類或者不同類均不影響調用。(從記憶體模型上來講,我們的靜態成員是處於堆中的,已經被分配了記憶體,所以我們可以直接對其進行調用。而非靜態成員是沒有被分配記憶體的,只有當他們被對象化,實例化才能被我們調用)。