-->

在Java中的法律主要方法签名在Java中的法律主要方法签名(legal main method s

2019-05-12 05:01发布

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