我是Java的新手,我對某事感到困惑:Java的Hello World如何在沒有對象實例的情況下工作?
在Java中的簡單hello世界程序中,沒有創建對象,所以在下面的例子中該類如何工作?
public class HelloWorld
{
public static void main (String args[])
{
System.out.println ("Hello World!");
}
}
我是Java的新手,我對某事感到困惑:Java的Hello World如何在沒有對象實例的情況下工作?
在Java中的簡單hello世界程序中,沒有創建對象,所以在下面的例子中該類如何工作?
public class HelloWorld
{
public static void main (String args[])
{
System.out.println ("Hello World!");
}
}
任何聲明爲靜態的變量或方法可以獨立於類實例使用。
實驗
嘗試編譯這個類:
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);
}
}
因爲main
是靜態方法這不創建HelloWorld
一個實例。靜態方法(和靜態字段)與類型相關,而不是與該類型的特定實例相關。
查看Java Tutorial page on static/instance members瞭解更多詳情,以及this Stack Overflow question(其中包括)。
像main()這樣的靜態方法可以在沒有對象的情況下使用。
您的編譯系統將程序的入口點綁定到類的「主」例程。只有一個班級可以有一個「主要」程序。
「主」是靜態的。這意味着它是一種「類方法」。它沒有一個實例。
以後,如果你想使用的任何方法的HelloWorld這不是靜態的,你必須創建在main方法的HelloWorld的實例(主會因爲它不是構造函數不再執行)。
更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我覺得這是更直觀,(原因我就不在這裏贅述了),我傾向於寫我自己的類(簡稱 - 線程問題/共享狀態等)時迴避靜態方法遠
這個「Hello World」是一個對象,至少:) – willcodejavaforfood 2009-07-09 10:39:51