静态块和主线程

时间:2011-05-31 13:03:58

标签: java jvm static-block

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

public class SimpleTest { 
    static{ 
        System.out.println(Thread.currentThread().getName()); 
        System.exit(0); 
    } 
} 

上面的程序运行没有任何异常(好吧和好,因为我在静态块本身退出)。但我得到以下作为输出:

  

主要

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

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

提前致谢, Brinal

4 个答案:

答案 0 :(得分:7)

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

您看到的输出并未表明正在执行main 方法。而是main 线程

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

澄清:

  

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

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

答案 1 :(得分:3)

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

答案 2 :(得分:1)

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

但是,您似乎没有main方法,因此如果它已经从静态块中删除,那么您的程序将崩溃,并且找不到main的异常。

答案 3 :(得分:0)

某些东西必须加载你的SimpleTest类,它必须是主线程(正如当前线程的名称所示)。在没有看到调用代码的情况下,很难知道这里发生了什么 - 但是有些东西导致SimpleTest类被加载并且它正在主线程上运行。