Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 静态块行为_Java_Static - Fatal编程技术网

Java 静态块行为

Java 静态块行为,java,static,Java,Static,//如果使用java MyClass从命令行调用(什么和为什么)将是输出?输出将是: public class MyClass{ static{ System.out.println("Weired Behaviour"); } } 其实并不奇怪。以下是JVM中发生的活动顺序 当您尝试调用应用程序时,将加载主类。类的静态块在JVM加载类时执行——静态块是类的初始值设定项,只有在类加载到内存中时才会被调用 类加载后,JVM尝试找出入口点-main方法。因为找不到m

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

输出将是:

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