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

时间:2015-06-15 05:43:41

标签: java oop

我最近开始学习Java,我遇到的第一个疑问是main在java中被声明为static,因此JVM不必初始化类来访问main。但我的问题是为什么JVM避免初始化主要的类?如果我们将main声明为非静态会产生什么代价呢?

4 个答案:

答案 0 :(得分:4)

编译器将视为实例方法,即您无法直接使用java YourClass执行它。

  

但我的问题是为什么JVM避免初始化主要的类?

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

Bootstrap类加载器在类文件中搜索main函数,如果main函数未声明为static,则会发生错误,因为将函数声明为static允许在不实例化main函数所在的类文件的情况下调用它。

答案 3 :(得分:0)

static 关键字的帮助下,可以调用任何变量,方法或语句块,而无需创建声明它的类的任何对象(或即时)。这就是 main()被声明为静态的原因,因此可以在不创建任何对象的情况下调用它。如果它没有被声明为静态,并且如果有多个类,那么 JVM 将如何知道实例化哪个类来调用main方法。