Java理解Java逻辑的主要方法
main方法是Java应用程序中最重要的方法,它可以作为入口点启动应用程序。在使用这种方法之前发生了什么还不清楚。请有人根据以下方法签名纠正我对该方法的看法,帮助我理解/澄清使用该方法之前发生的情况:Java理解Java逻辑的主要方法,java,main,Java,Main,main方法是Java应用程序中最重要的方法,它可以作为入口点启动应用程序。在使用这种方法之前发生了什么还不清楚。请有人根据以下方法签名纠正我对该方法的看法,帮助我理解/澄清使用该方法之前发生的情况: JVM至少创建一个将访问主方法的对象。这个(假定的)对象试图根据API访问Java应用程序,该API显然将您绑定到已知的方法签名publicstaticvoidmain(String[]args){} public您不能限制JVM上的(假定的)单独对象访问包含主要方法的对象,完全只查看逻辑,而
- JVM至少创建一个将访问主方法的对象。这个(假定的)对象试图根据API访问Java应用程序,该API显然将您绑定到已知的方法签名
publicstaticvoidmain(String[]args){}
您不能限制JVM上的(假定的)单独对象访问包含主要方法的对象,完全只查看逻辑,而不查看API/签名public
根本没有任何对象启动并运行来创建任何其他对象实例(除了假定的JVM实例)来实例化或创建对象。静态修饰符意味着访问此方法的唯一可能性,因为它没有绑定到实例,因此可以在没有实例的情况下访问。同样,这是一种逻辑,因为如果没有任何对象启动并运行(除了假定的JVM对象),就不可能有任何对象启动以实例化任何其他对象static
跨语言和应用程序/可执行文件的标准,以提供自定义应用程序的能力|args
这是一种正确且合乎逻辑的方法来处理和理解主要方法吗?我们并不完全清楚您真正想问的是什么,但本文至少涵盖了其中的一些内容: Java虚拟机通过使用引导类加载器(§5.3.1)创建初始类来启动,该类以依赖于实现的方式指定。然后,Java虚拟机链接初始类,对其进行初始化,并调用公共类方法void main(String[])。此方法的调用将驱动所有进一步的执行。执行构成主方法的Java虚拟机指令可能会导致链接(从而创建)其他类和接口,以及调用其他方法 在Java虚拟机的实现中,初始类可以作为命令行参数提供。或者,实现可以提供一个初始类,该类设置一个类加载器,该类加载器反过来加载一个应用程序。初始类的其他选择是可能的,只要它们与上一段中给出的规范一致 这本书还有一些其他的描述 JVM直接调用
main
方法-不需要创建新对象即可。尽管main
方法本身必须是公共的,但声明它的类却不是。例如:
public class Test {
private static class EntryPoint {
public static void main(String[] args) {
System.out.println("Hi");
}
}
}
然后执行以下操作:
java 'Test$EntryPoint'
它按预期打印“Hi”
Test
类之外的任何代码都不能访问EntryPoint.main()
,除非通过特权反射,或者JVM显然能够直接访问。当您使用类似java someClassName的命令时,就会发生流动。
1.加载类someClassName并执行静态块(如果有)
在类加载期间,将创建一个表示类的对象类。
2.它使用类名调用main方法(它不会创建类的任何对象)
这就是为什么主方法是静态的。java首先启动其核心—java.lang、类加载器、系统属性、运行时等,然后查看它必须做什么。在JVM初始化之前,该过程中没有“java”。这只是一个本地进程,因此我认为在这种情况发生之前用Java术语思考是错误的 现在JVM启动器将首先查看pre-main,按顺序调用它们(首先调用各自的静态块),然后查看main方法,如果有,调用该类静态块;最后调用main方法,将任何命令行参数传递给premain和main方法 简单测试:
public class Test {
static{
System.out.println("Hi static 1");
}
public static void main(String[] args) {
System.out.println("Hi main");
}
static{
System.out.println("Hi static 2 better to have 1 static block per class but you can have N ");
}
}比如说,文件
Demo.java
包含如下源代码
public class Demo{
}
当此代码按原样编译时,它将按原样成功编译
$javac Demo.java
但是当它被执行为
$java Demo
然后它显示一个异常错误
在类演示中找不到Main方法,请将Main方法定义为:public static void Main(字符串[]args)
所以编译器不负责检查main()
方法是否存在。JVM对此负责。JVM检查prottoype为的main()
方法
public static void main(Strings[] args)
main()
方法?是否可以将main()
方法更改为任何其他方法main\u hero()
main()
方法。是的,可以将main()
JVM{
public static void main(String[] args)
}
到
为什么公开
JVM安装在C或D驱动器中,以便在使用public的任何地方调用
为什么是静态的
main()
方法与对象无关,因此如果没有现有对象,JVM也必须调用此方法main
方法与对象没有任何关联
为什么无效
JVM将调用main()
方法,但是如果main()
方法返回,JVM可以用返回值做什么呢。所以它的意思是void
“JVM至少创建一个对象来访问您的主方法。”-是什么让您得出这个结论的?(我相信它总是会创建一个字符串数组,但这不是一个“将访问主方法”的对象。)main是静态的,不需要访问任何对象。仅供参考
JVM{
public static void main_hero(String[] args)
}