2011-08-05 90 views
4
class Test{ 
    public static void main(String... s){ 
     System.out.println("Hello"); 
    } 
} 

class Test{ 
    public static void main(String[] s){ 
     System.out.println("Hello"); 
    } 
} 

main()声明的上述两种语法有什么区别?main(String ... s)和main(String [] s)有什么区别?

Java是否有任何特殊需要具有可变长度参数?

+1

这个 '公共静态void main(String [] ... a){}' –

回答

6

没有什么区别(当你从命令行运行程序,即使用主要方法时)。 Java 5引入了varargs后出现了第一个变体。

简而言之,可变参数允许您将可变数量的参数传递给方法。对于方法主体,参数被分组到一个数组中。像Test.main("foo", "bar")而不是Test.main(new String[] {"foo", "bar"})。编译器会在场景后面为您创建阵列。

+0

你的第二段似乎表明有区别,与你的第一句话相反...... –

+0

没什么区别..当你运行命令行程序,主要方法的目的是什么。补充说明 – Bozho

+0

这种类型的变长参数是否可以用于其他地方? –

6

唯一的区别是,如果直接从其他Java代码调用main。第一种形式允许你写:

Test.main("first", "second", "third"); 

而第二个需要你明确地创建磁盘阵列:

Test.main(new String[] { "first", "second", "third" }); 

个人而言,我不认为我见过使用第一种形式 - 从其他代码调用main是非常罕见的。没有什么错了虽然。

+0

有趣的是,两种形式的JNI签名是相同的。 (我关心,因为我显式调用'Class.main()'通过JNI加载java插件到C++)。 –

+0

而唯一不适合我的是''main(String [])''Test.main(“a”,“b”,“c”)'---'main(String ...) )''''Test.main(new String [] {“a”,“b”,“c”}'似乎没问题(OSX上的Java 1.5.0) –

+0

@Michael:是的,后者肯定会起作用。这里没有什么特别的“main” - 它和其他可变参数方法一样。 –

3

没有区别。

通常,String... s允许传递以逗号作为分隔符的参数,而String[] s需要数组。 但在执行s是两种情况下的数组。所以...是一种意义上的中性糖。

0

可变数量的参数main(String... s)仅在Java 5.0中引入。

相关问题