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

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

4

3 回答 3

3

输出将是:

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

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

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

类加载完成后,JVM 会尝试找出入口点——main 方法。由于没有找到 main 方法,所以抛出异常。

于 2012-06-29T18:27:48.803 回答
0

假设你实际上有这样的东西,这样它就不会对你大喊大叫:

public class MyClass{

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

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

}

您将看到输出:

Weird Behavior

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

于 2012-06-29T18:31:16.197 回答
0

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

这将导致打印语句“Weired Behaviour” ,但随后它会尝试找到“main”方法的入口点,然后它会抛出异常。Exception in thread "main"

于 2012-06-29T18:46:16.990 回答