Java 静态块行为
//如果使用java MyClass从命令行调用(什么和为什么)将是输出?输出将是:Java 静态块行为,java,static,Java,Static,//如果使用java MyClass从命令行调用(什么和为什么)将是输出?输出将是: public class MyClass{ static{ System.out.println("Weired Behaviour"); } } 其实并不奇怪。以下是JVM中发生的活动顺序 当您尝试调用应用程序时,将加载主类。类的静态块在JVM加载类时执行——静态块是类的初始值设定项,只有在类加载到内存中时才会被调用 类加载后,JVM尝试找出入口点-main方法。因为找不到m
public class MyClass{
static{
System.out.println("Weired Behaviour");
}
}
其实并不奇怪。以下是JVM中发生的活动顺序
当您尝试调用应用程序时,将加载主类。类的静态块在JVM加载类时执行——静态块是类的初始值设定项,只有在类加载到内存中时才会被调用
类加载后,JVM尝试找出入口点-main方法。因为找不到main方法,所以会抛出异常。假设您确实有类似的内容,这样它就不会对您大喊大叫:
Weired Behaviour
Exception in thread "main" java.lang.NoSuchMethodError: main
您将看到以下输出:
public class MyClass{
static{
System.out.println("Weird Behavior");
}
public static void main(String[] args){}
}
这是因为类中的静态块是在JVM加载类时执行的。静态初始化器是在JVM加载类时,在创建类的实例之前,甚至在初始化任何静态方法或变量之前执行的块。 这将导致打印声明“Weired Behavior”
但是,它将尝试找到入口点,即“main”方法,然后抛出异常<代码>线程“main”中的异常由于缺少main方法,您将没有输出。您希望得到什么?添加更多细节。“如果使用java
MyClass
(什么和为什么)从命令行调用,输出会是什么?”您不是自己尝试过吗?一切看起来都简单明了。这里没什么奇怪的。顺便说一句,我看不出这是什么。我认为,在不加载和初始化类的情况下,JVM确定main
方法丢失,这与规范是一样兼容的。
Weird Behavior