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)
我没有对此进行建模。它已经修好了吗?
答案 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,那么您将直接收到错误。