首页 > 解决方案 > 为什么 public static void main 方法不会在实例化的类中自动运行?

问题描述

我理解public static void main在我的入门课程中的意义——在程序运行时执行代码。

我在网上阅读的一些文章指出,任何类都可以有一个主类。我创建了从第一个类调用的第二个类并创建了它的一个实例,但是第二个类主方法中的代码没有运行。我是否误解了这种方法在主类以外的类中是如何工作的?

public class Main {

    public static void main(String[] args) {
        aClass newClass = new aClass();

    }
}
public class aClass{
    public static void main(String[] args) {
        System.out.println("hello");
    }
}

标签: javamain

解决方案


确实“任何类都可以有一个主类”。但是只运行一种 main方法,不管有多少类有一个。

运行哪种main方法取决于应用程序的指定入口点,即在运行代码时明确指示的入口点java name.of.class,或者 JAR 清单指示的入口点。

相反,您可以为类提供静态初始化块。该块将在第一次加载类时运行一次:

public class Main {
    public static void main(String[] args) {
        new aClass();
        new aClass();
    }
}

public class aClass{
    static {
        // Run only once!
        System.out.println("hello");
    }
}

即使您没有实例化您的类,而是调用它的静态方法,这段代码也会运行。但是,如果您的代码中根本没有引用任何内容aClass,那么它的静态初始化程序将不会运行。


推荐阅读