public class MyClass{
static{
System.out.println("Weired Behaviour");
}
}
//如果使用java MyClass从命令行调用(什么和为什么)将是输出?
答案 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"