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)
的含义是什么?
答案 0 :(得分:11)
仅仅因为这是Java的要求。
程序的主要方法/入口点必须是声明为public static void main(String[] args)
的方法。使用String
参数声明的方法类似但不兼容。
一个数组与单个String不同 - 如果有人用三个命令行参数调用Java,JVM会创建一个三元素字符串数组,然后如何将它传递给只需要一个单串?
因此,在这种情况下,您尝试基于没有主方法的类来启动Java程序作为入口点。
(String...
之所以有效,是因为这是数组参数的语法糖,并编译为具有相同签名的方法。)
答案 1 :(得分:4)
最后,我在 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
答案 2 :(得分:3)
它在java中的默认值。 java编译器需要一个命令行参数数组。这就是为什么你需要指定字符串args []或String ...
答案 3 :(得分:2)
所有这些都是Java中主函数的有效/合法声明。
<foreach>
要记住的要点是 -
仅供练习..:P ...这些是无效的主要方法声明的示例 -
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
}
有些人会给出错误,而其他人只是过载主要方法...希望这有助于......!如果有,请通过评论告诉我..!
答案 4 :(得分:1)
public static void main(String a[])
是典型Java程序的主要入口点签名。所以你应该继续使用这种方法签名。
答案 5 :(得分:1)
Java Runtime尝试查找名称为“main”且方法类型为“String []”的方法。就像使用反射来查找类型参数为String []的方法一样。
还使用String [],以便运行时可以传递提供的程序参数或命令行参数。它就像运行时使用空格字符标记参数,然后调用名为“main”的方法。
方法main必须声明为public,static和void。它必须接受一个字符串数组的参数。此方法可以声明为
public static void main(String[] args)
or
public static void main(String... args)
您还可以参考Oracle Java规范文档以获得更多理解
答案 6 :(得分:1)
public static void main(String ... a) - &gt;是一个带有变量参数列表的方法,它在内部(在方法中)被视为数组。
法律主要方法签名:
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)
答案 7 :(得分:0)
您需要String[] args
参数(它是一个数组)。
原因是您需要使用指定的签名声明main()
方法(方法签名包含其名称,参数数量和参数的类型)。
因此,如果您创建一个不同参数类型的函数(String vs. String数组),则无法识别它。