静态块和主线程

Bri*_*nal 4 java jvm static-block

尝试使用java时,我发现了一个非常有趣的事情.请找到以下代码:

public class SimpleTest { 
    static{ 
        System.out.println(Thread.currentThread().getName()); 
        System.exit(0); 
    } 
} 
Run Code Online (Sandbox Code Playgroud)

上面的程序没有任何异常地运行(好吧,因为我正在静态块中退出).但我得到以下输出:

主要

由于我还没有启动主线程,它是如何创建的.根据我的理解,静态块在加载时执行.然后主线如何进入图片?

任何人都可以简要介绍如何在jvm中完成编译,加载和执行?还使用rt.jar?

先谢谢,Brinal

jjn*_*guy 7

当您运行任何Java程序时,主线程是第一个启动的线程.

您看到的输出并不表示该main 方法正在执行.相反,它是main 线程.

因此,无论何时启动Java程序,您都将拥有一个名为main execution的线程.并且,如果该线程立即退出JVM,那么这就是所有将运行的线程.

澄清:

根据我的理解,静态块在加载时执行.

加载类时执行静态块.这是由类加载器发生的,并在Java程序启动时在主线程中执行.


Joa*_*uer 3

主类在主线程上加载并初始化。尽管这没有在任何地方明确记录(据我所知),但这是一个非常安全的假设,因为几乎没有理由以不同的方式实现它。