首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >静态块和主线程

静态块和主线程
EN

Stack Overflow用户
提问于 2011-05-31 13:03:57
回答 5查看 1.3K关注 0票数 4

在尝试使用java时,我发现了一件非常有趣的事情。请查找以下代码:

代码语言:javascript
运行
复制
public class SimpleTest { 
    static{ 
        System.out.println(Thread.currentThread().getName()); 
        System.exit(0); 
    } 
} 

上面的程序毫无例外地运行(很好,因为我退出了静态块本身)。但我得到的输出如下:

main

因为我还没有启动主线程,所以它是如何创建的。根据我的理解,静态块是在加载时执行的。那么主线程是如何进入画面的呢?

请大家简要介绍一下jvm中的编译、加载和执行过程。还有rt.jar的使用吗?

谢谢你,卤水

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-05-31 13:10:43

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

票数 3
EN

Stack Overflow用户

发布于 2011-05-31 13:09:59

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

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

因此,只要启动Java程序,就会有一个名为main执行的线程。而且,如果该线程立即退出JVM,那么将运行所有线程。

澄清:

按照我的理解,静态块是在加载时执行的。

加载类时执行静态块。这种情况由类加载器执行,并在Java程序启动时在主线程中执行。

票数 7
EN

Stack Overflow用户

发布于 2011-05-31 13:10:07

所有Java代码都在某个线程上执行。通常(并且毫不奇怪)主线程被命名为" main“。通常,主线程加载主类(执行静态块),然后调用main方法。

但是,您似乎没有一个main方法,所以如果它是从静态块中提取出来的,那么您的程序就会崩溃,并且没有找到main

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6187996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档