在java中為什麼main方法必須是靜態的解釋
阿新 • • 發佈:2019-02-20
public class Test {
public static void main(String[] args) { //正確的
double i = 50.0;
double k = i + 50.0;
double j = k+1;
System.out.println("j is "+j+"and k is "+k);
}
}
![正確執行的結果](http://img.blog.csdn.net/20171016173400362?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ2FvcWlzb25n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
public class Test1 {
public void main(String[] args) { //錯誤的
double i = 50.0;
double k = i + 50.0;
double j = k+1;
System.out.println("j is "+j+"and k is "+k);
}
}
![錯誤資訊提示如下](http://img.blog.csdn.net/20171016170941631?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ2FvcWlzb25n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
要解釋這個問題得首先了解一下什麼是static:
static可以修飾成員變數和成員方法,被static修飾的變數和方法稱之為與類相關與物件無關的變數和方法,所以又稱被static修飾的變數和方法分別為類屬型和類方法。需要注意的是在static修飾的方法體內不能直接使用非static修飾的成員變數和成員方法。
這也就是說static方法屬於某個類而不屬於某個物件,所以在static方法中是可以直接通過類名呼叫的而不必創建出例項。
而在C/C++中,其main方法並不是屬於某個類的,它是一個全域性的方法,所以當我們執行的時候,C/C++編譯其能夠很容易的就找到main方法並執行;但是行程式的時候,因為java都是以類組織在一起的,當我們執行某個程式的時候,我們並不知道這個main方法放在那個類中,也不知道是否要產生一個類的物件,所以,為了解決這個問題我們將main方法定義為static的,這樣的話當 這樣的**這樣的話當我們在執行一個java程式碼的時候,例如上圖中用命令提示符java Test,編譯器就會在Test類中去尋找靜態的main方法,而不產生Test類的物件,當JVM載入Test類的時候main方法自然也就被載入了而用來作為程式的入口。