关于oop:如果我在java非静态中声明main,会发生什么

What will happen if I declare main in java non-static

本问题已经有最佳答案,请猛点这里访问。

我最近开始学习Java,我遇到的第一个疑点是在Java中声明静态,这样JVM就不必初始化类来访问Maund。但我的问题是,为什么JVM避免初始化具有main的类?如果我们将MAIN声明为非静态,会产生什么成本?


编译器将作为实例方法处理,即不能直接用java YourClass执行它。

But my question is why JVM avoid initializing the class which has main?

因为不需要初始化类,因为它不能是应用程序的入口点。在运行时,JVM将检查是否存在public static void main(String[] args)方法,如果有,则它将初始化类(即执行所有的静态块,初始化静态变量等)。但是,如果该类被认为是无效的,不能作为应用程序的入口点,则操作将中断。


与使用静态关键字一样,可以调用任何变量、方法或语句块,而不必创建声明它的类的任何对象(或即时对象)。这就是为什么main()被声明为静态的,这样就可以在不创建任何对象的情况下调用它。如果它不是声明为静态的,并且存在多个类,那么JVM将如何知道将哪个类实例化为调用main方法。


引导类加载程序在类文件中搜索主函数,如果主函数未声明为静态函数,则会遇到错误,因为将函数声明为静态函数允许在不实例化主函数所在的类文件的情况下调用它。


关键字static允许调用main(),而不必实例化该类的特定实例。这是必要的,因为在创建任何对象之前,JVM都会调用main()。

如果没有入口点,如何执行?