你好,没有主要方法的世界(由Horstmann提供)

时间:2013-08-17 10:41:23

标签: java

Core Java第7版中的Horstmann写道,可以在没有主要方法的情况下显示Hello,world。它是这样完成的:

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)

我没有对此进行建模。它已经修好了吗?

2 个答案:

答案 0 :(得分:6)

Java 7 在加载类之前查找main方法。这是以前java版本的行为更改,因此您的static块未执行。在以前的版本中,行为是JRE用于在加载类之后和执行静态块之后查找main方法。

因此,如果您在java 7之前的任何版本上运行代码,您将看到执行static块。

你正在阅读的书可能不是为java 7编写的,而是jdk&用于执行示例的jre是版本7.

建议:作为一种良好的阅读练习,您应该尝试按照书中指定的相同版本运行书籍样本,以避免混淆。虽然在这种情况下,你的困惑会让你学习一些关于java 7的新知识。

答案 1 :(得分:2)

在Java 7之前,JVM用于在搜索main()方法之前加载类。

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

因此,当您通过java Hello执行此操作时,将首先加载类,并打印Hello, world(在加载类时执行静态方法/块,并在引用类时加载类)。然后JVM将在Hello类中搜索main()方法,并将抛出错误,因为它不存在。然而,这在java 7中得到修复。因此,如果您使用的是Java 7,那么您将直接收到错误。