jvm如何进入public static void main?

时间:2014-07-03 15:38:31

标签: java

jvm如何进入默认类:

class try1
{
public static void main(String args[])
{
    ...
}
}

其中jvm如何访问此方法?

在包中如果一个类是默认的,它的公共方法不能从外部访问,那么jvm如何进入这个类?

3 个答案:

答案 0 :(得分:9)

调用main方法不是JVM本身。这是Java启动器的工作,即java.exe Java启动程序是一个用C编写的小程序,它使用常规的JNI functions

  1. JNI_CreateJavaVM创建新的JVM实例并获取JNIEnv的实例;
  2. JNIEnv::FindClass找到命令行中指定的主类;
  3. JNIEnv::GetStaticMethodID在#2班中查找public static void main(String[])方法。
  4. JNIEnv::CallStaticVoidMethod调用#3中的方法。
  5. 事实上,JNI允许您使用所有类,方法和字段,即使使用private修饰符。

答案 1 :(得分:0)

首先,JVM不会进入该方法,它会调用(调用)它(是的,这很重要)。关键字public声明可以从任何地方访问该方法(不同packages); static关键字声明您可以在不设置class(以及其他内容)的情况下调用方法,据我所知,包含main方法的类始终为public

答案 2 :(得分:0)

如果你正在运行一个可执行jar,你明确地告诉java要在命令行或.jar的Manifest中加载什么类。

Java规范Chapter 12简要介绍了JVM启动时会发生什么。 (JVM规范Chapter 5更详细地介绍了它。)

简而言之: java try1将加载try1类,然后链接,验证,解析并初始化它。

完成后,它会查找publicstaticvoid的主要方法,该方法接受String的数组,然后它将执行该方法。

JVM并不关心您的班级是否公开。当第一个类加载时,它是当前的编译单元,初始access control是从它计算的。