在尝试使用java时,我发现了一件非常有趣的事情。请查找以下代码:
public class SimpleTest {
static{
System.out.println(Thread.currentThread().getName());
System.exit(0);
}
} 上面的程序毫无例外地运行(很好,因为我退出了静态块本身)。但我得到的输出如下:
main
因为我还没有启动主线程,所以它是如何创建的。根据我的理解,静态块是在加载时执行的。那么主线程是如何进入画面的呢?
请大家简要介绍一下jvm中的编译、加载和执行过程。还有rt.jar的使用吗?
谢谢你,卤水
发布于 2011-05-31 13:10:43
主类在主线程上加载和初始化。尽管在任何地方都没有明确记录(据我所知),但这是一个相当安全的假设,因为几乎没有理由以不同的方式实现它。
发布于 2011-05-31 13:09:59
当您运行任何Java程序时,主线程是启动的第一个线程。
您所看到的输出并不表示main方法正在执行。相反,它是main线程。
因此,只要启动Java程序,就会有一个名为main执行的线程。而且,如果该线程立即退出JVM,那么将运行所有线程。
澄清:
按照我的理解,静态块是在加载时执行的。
加载类时执行静态块。这种情况由类加载器执行,并在Java程序启动时在主线程中执行。
发布于 2011-05-31 13:10:07
所有Java代码都在某个线程上执行。通常(并且毫不奇怪)主线程被命名为" main“。通常,主线程加载主类(执行静态块),然后调用main方法。
但是,您似乎没有一个main方法,所以如果它是从静态块中提取出来的,那么您的程序就会崩溃,并且没有找到main。
https://stackoverflow.com/questions/6187996
复制相似问题