2009-07-09 55 views

回答

10

任何聲明爲靜態的變量或方法可以獨立於類實例使用。

實驗

嘗試編譯這個類:

public class HelloWorld { 
    public static int INT_VALUE = 42; 

    public static void main(String args[]) { 
     System.out.println("Hello, " + INT_VALUE); 
    } 
} 

這成功,因爲變量INT_VALUE聲明爲static(如法main)。

嘗試與以前的類一起編譯這個類:

public class HelloWorld2 { 
    public static void main(String args[]) { 
     System.out.println("Hello, " + HelloWorld.INT_VALUE); 
    } 
} 

這成功,因爲INT_VALUE變量既是靜態公共。沒有太多細節,避免公開變量通常是很好的做法。

嘗試編譯這個類:

public class HelloWorld { 
    public int int_value = 42; 

    public static void main(String args[]) { 
     System.out.println("Hello, " + int_value); 
    } 
} 

這不會編譯因爲從類的HelloWorld沒有對象實例。對於這個程序編譯(並運行),那就必須改變:

public class HelloWorld { 
    public int int_value = 42; 

    public HelloWorld() { } 

    public static void main(String args[]) { 
     HelloWorld hw = new HelloWorld(); 
     System.out.println("Hello, " + hw.int_value); 
    } 
} 
14

因爲main靜態方法這不創建HelloWorld一個實例。靜態方法(和靜態字段)與類型相關,而不是與該類型的特定實例相關。

查看Java Tutorial page on static/instance members瞭解更多詳情,以及this Stack Overflow question(其中包括)。

+0

你怎麼能張貼秒內回答? – rahul 2009-07-09 10:11:27

+0

碰巧看到它,就是這樣。 – 2009-07-09 10:12:03

+1

有沒有你無法回答的問題? – rahul 2009-07-09 10:13:08

4

像main()這樣的靜態方法可以在沒有對象的情況下使用。

-1

您的編譯系統將程序的入口點綁定到類的「主」例程。只有一個班級可以有一個「主要」程序。

「主」是靜態的。這意味着它是一種「類方法」。它沒有一個實例。

0

以後,如果你想使用的任何方法的HelloWorld這不是靜態的,你必須創建在main方法的HelloWorld的實例(主會因爲它不是構造函數不再執行)。

9

更OO版本會是什麼樣子:

public class HelloWorld { 
    public void sayHello() { 
     System.out.println("Hello World"); 
    } 
    public static void main(String[] argv) { 
    HelloWorld hw = new HelloWorld(); 
    hw.sayHello(); 
    } 
} 

我懷疑更像是你期待什麼。它實例化一個新的HelloWord類實例,然後要求它做一些事情。對於學習OO我覺得這是更直觀,(原因我就不在這裏贅述了),我傾向於寫我自己的類(簡稱 - 線程問題/共享狀態等)時迴避靜態方法遠

相關問題