如果我用java非静态声明main,会发生什么
我最近开始学习Java,我遇到的第一个疑问是main在Java中声明为静态,这样JVM就不必初始化类来访问main。但是我的问题是为什么JVM避免初始化具有main的类?如果我们将main声明为非静态,会产生什么成本?编译器会将其视为实例方法,也就是说,您将无法使用java类直接执行它 但是我的问题是为什么JVM避免初始化具有main的类 因为不需要初始化类,因为它不能成为应用程序的入口点。在运行时,JVM将检查是否存在公共静态void mainString[]args方法,如果存在,则将初始化该类,即执行其所有静态块,初始化其静态变量等等。但是,如果该类被视为无效的应用程序入口点,则操作将中断。关键字static允许调用main,而无需实例化该类的特定实例。 这是必要的,因为JVM在创建任何对象之前调用main如果我用java非静态声明main,会发生什么,java,oop,Java,Oop,我最近开始学习Java,我遇到的第一个疑问是main在Java中声明为静态,这样JVM就不必初始化类来访问main。但是我的问题是为什么JVM避免初始化具有main的类?如果我们将main声明为非静态,会产生什么成本?编译器会将其视为实例方法,也就是说,您将无法使用java类直接执行它 但是我的问题是为什么JVM避免初始化具有main的类 因为不需要初始化类,因为它不能成为应用程序的入口点。在运行时,JVM将检查是否存在公共静态void mainString[]args方法,如果存在,则将初始化
如果没有入口点,如何执行?引导类加载器在类文件中搜索主函数,如果主函数未声明为静态,则会出现错误,因为将函数声明为静态允许调用它,而无需实例化主函数所在的类文件 与使用static关键字一样,可以调用任何变量、方法或语句块,而无需创建声明它的类的任何对象或瞬间。这就是main被声明为静态的原因,这样就可以在不创建任何对象的情况下调用它。若它并没有声明为静态的,并且存在多个类,那个么JVM将如何知道实例化哪个类来调用main方法 但是我的问题是为什么JVM避免初始化具有main的类?如果我们将main声明为非静态,会产生什么成本;澄清Java在初始化和实例化类之间的区别可能很重要。在类装入器装入类之后,调用类的任何方法之前,该类只初始化一次;例如,初始值设定项为静态变量赋值。当创建新实例并运行其实例初始值设定项(即构造函数)时,该类将被实例化。