java中的合法主方法签名

class NewClass{ public static void main(String a){ System.out.print("Hello"); } } 

当我尝试执行上面的代码时,它显示错误, 找不到主要方法 。 但是当我将public static void main(String a)更改为public static void main(String... a)public static void main(String a[]) 。 然后,它工作.. !!

所以,我的问题是我们可以用多少种方法编写合法的主方法签名以及这个签名public static void main(String... a)含义是什么?

仅仅因为这是Java的要求。

程序的主要方法/入口点必须是声明为public static void main(String[] args) 。 使用String参数声明的方法类似但不兼容。

一个数组与单个String不同 – 如果有人用三个命令行参数调用Java,JVM会创建一个三元素字符串数组,然后它如何将它传递给只需要一个字符串的方法?

因此,在这种情况下,您尝试基于没有主方法充当入口点的类来启动Java程序。

String...工作的原因是因为这是数组参数的语法糖,并编译为具有相同签名的方法。)

最后,我在Sun认证程序员Java 6书中找到了我的问题的答案。

第一个问题是,使用main方法有多少种不同的法律方式?

法律主要方法签名是

 public static void main(String a[]) public static void main(String[] a) public static void main(String... a) 

(String... a)是什么意思?

要使用var-args参数声明方法,我们需要使用ellipsis(...)然后使用空格,然后使用将保存接收参数的数组的名称。 因此,上面称为变量参数 ,意味着0到很多

并且,使用变量参数参数的规则必须是方法签名中的最后一个参数,并且在方法中只能有一个变量参数。

例如:

 void myfunc(String... a) //legal void myfunc(String a...) //illegal void myfunc(String a,int.. b) //legal void myfunc(String... a,int b) //illegal 

它在java中的默认值。 java编译器需要一个命令行参数数组。 这就是为什么你需要指定字符串args []或String …

所有这些都是Java中main函数的有效/合法声明。

 public static void main(String[] args) { // code } static public void main(String[] args) { // code } static public void main(String args[]) { // code } public static void main(String[] MarkElliotZuckerberg) { // code } public static void main(String... NewYork) { // code } 

要记住的要点是 –

  • 关键字public和static是可互换的但是必需的。
  • main方法的参数可以采用var-args语法。
  • 这个名字可以是任何东西..!

仅供练习..:P ……这些是无效的主要方法声明的示例 –

 static void main(String[] args) { // public is missing } public void main(String args[]) { // static is missing } public static int main(String... Java) { // return type not void return 0; } public void Main(String args[]) { // "main" not "Main" } public void main(string args[]) { // "String" not "string" } public void main(String.. SayHi) { // Ellipses is 3 dots ! } 

有些人会给出错误,而有些人只是过载主要方法…希望这有助于……! 如果有,请通过评论告诉我..!

源程序 – Java程序设计理论教程

public static void main(String a[])是典型Java程序的主要入口点签名 。 所以你应该继续这个方法签名。

Java Runtime尝试查找名称为“main”且方法类型为“String []”的方法。 就像使用reflection来查找类型参数为String []的方法一样。

还使用String [],以便运行时可以传递提供的程序参数或命令行参数。 它就像运行时使用空格字符标记参数,然后调用名为“main”的方法。

方法main必须声明为public,static和void。 它必须接受一个字符串数组的参数。 此方法可以声明为

 public static void main(String[] args) or public static void main(String... args) 

您还可以参考Oracle Java规范文档以获得更多理解

第12章执行 – 第12.1.4节调用Test.main

public static void main(String … a) – >是一个带有变量参数列表的方法,它在内部(在方法中)被视为数组。

法律主要方法签名:

public static void main(String a[])

static public void main(String a[])

public static void main(String[] a)

static public void main(String[] a)

public static void main(String... a)

static public void main(String... a)

你需要String[] args参数(它是一个数组)。

原因是您需要使用指定的签名声明main()方法(并且方法签名包含其名称,参数数量和参数类型)。

因此,如果您创建一个具有不同参数类型(String与String数组)的函数,则无法识别它。