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)
意味着什么?
Answer 1:
很简单,因为这是Java的要求。
一个主要方法/入口点的程序必须声明为方法public static void main(String[] args)
你是用声明的方法String
参数相似,但不兼容。
数组是不一样的一个String - 如果有人调用Java的三个命令行参数,在JVM将创建一个三元素的字符串数组,然后将它怎么会传递到您的方法,该方法只需要一个字符串呢?
因此,在这种情况下,你试图推出基于一个类的Java程序,它没有作为一个切入点的主要方法 。
(...的原因String...
的工作原理是,因为这是一个数组参数语法糖,并编译成具有相同签名的方法。)
Answer 2:
最后,我发现我在Sun认证的程序员对Java 6的书问题的答案。
第一个问题是,有多少使用的主要方法的不同法律途径?
法律主要方法签名
public static void main(String a[])
public static void main(String[] a)
public static void main(String... a)
哪些呢(String... a)
是指?
要使用声明的方法var-args
参数,我们需要遵循一个ellipsis(...)
然后使用空间,然后将保存收到的参数数组的名称。 所以,上面的术语称为可变参数和这意味着0到许多 。
而且,使用可变参数参数是规则, 必须在方法签名的最后一个参数,只能有一个在方法VAR-ARGS。
例如:
void myfunc(String... a) //legal
void myfunc(String a...) //illegal
void myfunc(String a,int.. b) //legal
void myfunc(String... a,int b) //illegal
Answer 3:
它在Java默认。 Java编译器期望的命令行参数的阵列。 这就是为什么你需要指定字符串ARGS []或字符串...
Answer 4:
所有这些都是在Java中的主要功能的有效/合法声明。
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
}
点要记住的是 -
- 公共的和静态的关键字是可以互换的,但强制性的。
- 的主要方法的参数可以采取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教程的规划原理
Answer 5:
public static void main(String a[])
是一个典型的Java程序的主入口点的签名 。 所以,你应该得到与此方法的签名。
Answer 6:
Java运行时尝试找到名称的方法“主”与参数类型“的String []”。 它就像使用反射用于查找与类型参数作为字符串[]的方法。
也字符串[]用于使得所述运行时可以通过所提供的程序参数或命令行参数。 它就像运行时的标记化与参数的空白字符,然后再调用这个方法命名为“主”。
该方法主要必须声明为public,static和无效的。 它必须接受一个参数是一个字符串数组。 这种方法可以声明为
public static void main(String[] args)
or
public static void main(String... args)
您也可以参考Oracle Java规范文档以获得更多的理解
第12章执行-第12.1.4调用Test.main
Answer 7:
公共静态无效主要(字符串...一) - >是具有可变参数列表的方法,即在内部是(在该方法中)作为数组进行处理。
法律主要方法签名:
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)
Answer 8:
正是你需要的String[] args
参数(它是一个数组)。
其原因是,你需要声明main()
与指定的签名方法(和方法签名包含其名称,参数的数量和类型的参数)。
所以,如果您创建一个不同的参数类型(字符串与字符串数组),它无法识别的功能。
文章来源: legal main method signature in java