2013-08-17 30 views
4

核心Java第7版中的Horstmann寫道,可以顯示你好,沒有主要方法的世界。它是這樣做的:你好,沒有主要方法的世界(通過Horstmann)

public class Hello{ 
    static{ 
     System.out.println("Hello, world"); 
    } 
} 

他說,首先你好,世界將被寫入。只有這樣你纔會收到錯誤信息。

我用

java version "1.7.0_21" 
Java(TM) SE Runtime Environment (build 1.7.0_21-b11) 
Java HotSpot(TM) 64-Bit Server VM (build 23.21-b01, mixed mode) 

我無法建模。它已經被修復了嗎?

+0

所以你怎麼跑這 – Satya

+0

的javac Hello.java那麼Java你好 – Kifsif

+0

,什麼是你所得到的錯誤 – Satya

回答

6

Java 7在加載類之前查找主要方法。這是從以前的Java版本的行爲改變,因此您的static塊不執行。在以前的版本中,行爲是JRE用於在加載類後以及在執行靜態塊之後查找main方法。

因此,如果您在Java 7之前的任何版本上運行代碼,您將看到static塊會執行。

你正在閱讀的Java 7,但使用的是執行樣本的jdk & JRE可能不會寫入這本書是第7版

的建議:作爲一個良好的閱讀實踐中,你應該嘗試按照書中指定的相同版本運行書本樣本以避免混淆。雖然在這種情況下,您的困惑會導致您學習有關Java 7的新內容。

2

在用於在搜索main()方法之前加載類的Java 7 JVM之前。

public class Hello{ 
    static{ 
     System.out.println("Hello, world"); 
    } 
} 

因此,當你通過java Hello類執行此將被加載的第一和Hello, world將被打印(當類被加載,並且當它們被引用的類被裝載靜態方法/塊被執行)。然後,JVM將在Hello類中搜索main()方法,並將拋出一個錯誤,因爲它不存在。然而,這在Java 7中得到了解決。因此,如果您使用的是Java 7,那麼您將直接得到一個錯誤。