33

main()我应该如何在 Java 中声明方法?

像这样:

public static void main(String[] args)
{
    System.out.println("foo");
}

或者像这样:

public static void main(String... args)
{
    System.out.println("bar");
}

String[]如果有的话,实际上有什么区别String...

4

5 回答 5

56

我应该如何在 Java 中声明 main() 方法?

String[]并且String...在内部是相同的,即字符串数组。不同之处在于,当您使用可变参数 ( String...) 时,您可以调用如下方法:

public void myMethod( String... foo ) {
    // do something
    // foo is an array (String[]) internally
    System.out.println( foo[0] );
}

myMethod( "a", "b", "c" );

// OR
myMethod( new String[]{ "a", "b", "c" } );

// OR without passing any args
myMethod();

当您将参数声明为 String 数组时,您必须这样调用:

public void myMethod( String[] foo ) {
    // do something
    System.out.println( foo[0] );
}

// compilation error!!!
myMethod( "a", "b", "c" );

// compilation error too!!!
myMethod();

// now, just this works
myMethod( new String[]{ "a", "b", "c" } );

String[]和...之间实际上有什么区别String?如果有的话?

约定是String[]用作主要方法参数,但 usingString...也可以,因为当您使用可变参数时,您可以以与调用带有数组作为参数的方法相同的方式调用方法,并且参数本身将是方法内的数组身体。

一件重要的事情是,当您使用可变参数时,它必须是方法的最后一个参数,并且您只能有一个可变参数参数。

您可以在此处阅读有关可变参数的更多信息:http: //docs.oracle.com/javase/1.5.0/docs/guide/language/varargs.html

于 2012-08-15T16:49:35.457 回答
5

String...转换为String[]. 主要区别在于您可以通过 2 种方式调用 vararg 方法:

method(a, b, c);
method(new String[] {a, b, c});

而您需要调用一个接受这样的数组的方法:

method(new String[] {a, b, c});

对于main方法,它没有任何区别。

于 2012-08-15T16:49:46.943 回答
4

String[] args接受一个数组参数。

String... args将任意数量的字符串作为其参数,并从中创建一个数组。

于 2012-08-15T16:49:55.463 回答
1

让我们通过示例了解差异及其超级简单

mymethod(String... str)
   vs
mymethod(String []str)


方法 getid 采用 int 类型数组。

因此,如果我们调用 getId 方法,我们需要传递数组。
要传递数组,我们可以创建匿名数组,或者只是先创建一个数组并像我在下面的示例中那样传递。

class test
{
    public void getid(int []i)
    {
      for(int value:i)
     {
      System.out.println(value);
     }
    }

    public static void main(String []arg)
    {
     int []data = {1,2,3,4,5}
     new test().getid(data);
    }
}

现在下面我们使用三点 -> mymethod(int... i)

现在该方法仍然需要数组,但不同的是现在我们可以将直接值传递给该方法,并且“...”自动将其转换为数组
外观示例以下

class test
{
    public void getid(int ...i)
    {
    for(int value:i)
    {
    System.out.println(value);
    }
    }
    public static void main(String []arg)
    {
    new test().getid(1,2,3,4);
    }

}

使用“...”而不是“[]”的优势
1)它节省内存:-
在示例中使用 mymethod(int [])
当我们在主方法“Data[]”中创建一个数组时,它们会创建新对象并获得内存中有空间
以及当我们创建方法并在那里定义参数时,例如:-
getid(int []) -> 这将在内存中创建另一个对象,因此我们在内存中有 2 个彼此相同的对象

2)使用“...”时您可以不传递任何内容
在示例二中,您可以在调用“getid”方法时不传递任何内容,它们将正常工作而不会出现任何错误,这对于例如使程序更稳定非常有帮助

.
.
.
    public static void main(String []arg)
    {
    new test().getid();
    }
.
.
.


But if we call "getid" method and didn't pass any argument while using "[ ] " then it will show the error at compile time

于 2018-02-13T11:37:00.797 回答
0

String[]是一个字符串数组。因此是一个包含许多String数据类型变量的容器。例如:

String[] strArray = new String[2];
str[0] = "Hello";
str[1] = "World";

String str = "Hello World";

希望这可以清除您的疑问:)

于 2016-04-07T12:47:36.230 回答