JAVA支持反射JAVA还需要主要方法为静态吗?
使用反射我们可以创建类的对象,甚至可以调用该类的方法,这样为什么JAVA需要main方法是静态的。
感谢您对此的评论。
答案 0 :(得分:13)
唯一能够可靠回答的答案是“because the JLS says so”。引用:
方法
main
必须声明为public
,static
和void
。它必须指定一个形式参数(第8.4.1节),其声明的类型是String
的数组。
答案 1 :(得分:2)
嗯,自Java 1.1以来已经引入了反思,因此最初的Java 1.0标准不能基于它们。他们可能只是为了引导程序而有一些类似反射的代码,而且当Java仍被称为Oak时,不知道它有多完整。
此外,这可能是继承自C ++并继承自C。虽然C ++也可以先构造一个应用程序对象并在其上调用virtual main()
,但这可能看起来太复杂了,选择是使用简单的main
,C开发人员很熟悉。
答案 2 :(得分:1)
因为运行程序时,运行时环境会查找签名为public static void main (String[] args)
的方法。即使支持反射,运行时仍然需要首先调用类main
方法。
答案 3 :(得分:0)
公开:为了让JVM获得对主要方法的访问权限,必须将其公开。
静态:因为它确实很复杂或者可能无法预见托管主方法的类的实例化标准,所以它必须是静态的,使JVM无需调用它从类中创建一个对象。
毕竟,在定义语言时需要明确的契约,没有这样的强制约束,JVM设计者可能会遇到麻烦。
答案 4 :(得分:0)
public static void main(String []args)
中每个关键字的说明
1 public
。
它必须是public
,因为JVM
不属于您定义class
方法的main
。因此,它不应该是private
2 static
。
JVM
不会构造任何对象来调用main
。主要不取决于class
3 void
。
main
不会向JVM
返回任何有用的信息。程序执行从main()
开始,如果正常退出结束,则main
中的最后一个语句。在批次之间发生。
4 main
。
它只是一个专有名词,用于表示该方法的重要性
5 Array of Strings
。:
传递给main的args是一个或多个单词,它们可以是int
,float
,char
或String
。以上所有内容均可表示为Strings
。
希望它有帮助