静态块奇怪的行为

时间:2012-06-29 18:22:16

标签: java static

public class MyClass{
    static{
        System.out.println("Weired Behaviour");
    }
}

//如果使用java MyClass从命令行调用(什么和为什么)将是输出?

3 个答案:

答案 0 :(得分:3)

输出将是:

Weired Behaviour
Exception in thread "main" java.lang.NoSuchMethodError: main

实际上并不是Weired。以下是JVM中发生的一系列活动。

当您尝试调用应用程序时,将加载主类。当JVM加载类时,会执行类的静态块 - 静态块是一种类初始化程序,只有在内存中加载类时才会调用它。

加载类后,JVM会尝试找出入口点 - main方法。因为它没有找到主要方法,所以抛出了异常。

答案 1 :(得分:0)

假设你确实有这样的东西,那么它不会对你大喊:

public class MyClass{

    static{
        System.out.println("Weird Behavior");
    }

    public static void main(String[] args){}

}

您将看到输出:

Weird Behavior

这是因为当JVM加载类时,类中的静态块会被执行。

答案 2 :(得分:0)

Static Initalizer是在JVM加载类时,在创建类的实例之前,甚至在初始化任何静态方法或变量之前执行的块。

这将导致打印声明“Weired Behavior” 但是它会尝试找到“main”方法的入口点,然后它会抛出一个异常。 Exception in thread "main"