the*_*der 4 java program-entry-point
主要方法是Java应用程序中最重要的方法,它将启动应用程序作为入口点.在使用此方法之前发生的事情尚不清楚.请有人帮助我理解/澄清在使用该方法之前发生的事情,根据方法签名纠正我的感知,如下所示:
JVM创建至少一个将访问main方法的Object.此(假定的)对象尝试根据API访问您的Java应用程序,这显然会将您绑定到已知的方法签名public static void main (String[] args){}
public 您不能限制JVM上的(假定的)单独对象访问您的对象,主要方法是单独完全查看逻辑而不是API /签名?
static没有对象启动和运行来创建任何其他对象实例(除了假定的JVM之外)来实例化或创建对象.静态修饰符意味着访问此方法的唯一可能性,因为它未绑定到实例,因此可以访问实例.然而,这是逻辑,因为没有任何对象启动和运行(除了假设的JVM之外),还没有任何对象尚未实例化任何其他对象?
args 跨语言和应用程序/可执行文件的标准,以提供自定义应用程序的能力?|
这是接近和理解主要方法的正确和合理的方法吗?
目前还不完全清楚你真正要问的是什么,但JVM规范第5.2节至少涵盖了以下内容:
Java虚拟机通过使用引导类加载器(第5.3.1节)创建一个初始类来启动,该类以依赖于实现的方式指定.然后,Java虚拟机链接初始类,初始化它,并调用公共类方法void main(String []).调用此方法会驱动所有进一步的执行.构成主方法的Java虚拟机指令的执行可以导致附加类和接口的链接(并因此创建),以及其他方法的调用.
在Java虚拟机的实现中,初始类可以作为命令行参数提供.或者,该实现可以提供初始类,该类设置类加载器,该类加载器又加载应用程序.初始类的其他选择是可能的,只要它们与前一段中给出的规范一致即可.
该JLS 12.1节有一些其他的描述了.
JVM main直接调用该方法 - 它不需要创建新对象来执行此操作.虽然main方法本身必须是公共的,但它声明的类却没有.例如:
public class Test {
private static class EntryPoint {
public static void main(String[] args) {
System.out.println("Hi");
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后执行:
java 'Test$EntryPoint'
Run Code Online (Sandbox Code Playgroud)
它按预期打印"Hi".
除了特权反射之外,Test类外的任何代码都不能访问EntryPoint.main()- 或者JVM显然能够直接访问.
| 归档时间: |
|
| 查看次数: |
2030 次 |
| 最近记录: |