0

我正在学习 Java,我想知道 String args[](main的参数) 是如何工作的。对于方法中定义的其他字符串数组,需要使用固定维度对其进行初始化才能使用。

例如,要在一个字符串中输入 10 个或更少的元素,我需要输入String a = new String[10];

但是,如果我只是键入String a;然后键入a[0] = "Word;",我会收到“变量 a 可能未初始化”错误。

但是,对于 String args[],​​我不需要键入String[] args = new args[]. 为什么会这样?另外,是否可以创建一个无限大小的字符串,如 String args[]?(对不起,如果我不清楚)

4

3 回答 3

3

对于方法中定义的其他字符串数组,需要使用固定维度对其进行初始化才能使用。

好吧,这就是在方法String...参数的情况下发生的情况main。它使用您作为命令行参数传递的固定数量的参数进行初始化。但在那之后,你不能向数组中添加任何东西,因为大小现在是固定的。如果你不传递任何参数,它的长度将是0.

请注意,参数类型实际上是 varargs,而不是 a String[],尽管在内部,前者无论如何都会转换为后者。使用 varargs 获得的好处是,您可以传递可变数量的参数,而无需显式创建数组。

另外,是否可以创建一个无限大小的字符串,如 String args[]?

不,数组的大小不是无限的。由于 的类型args.lengthint. 逻辑上元素的最大数量可以是2 ^ 32 - 1。但实际上并非如此。在此之前内存可能会溢出很多。

另请注意,由于我们正在谈论方法形式参数,因此仍然存在最大方法大小的限制。根据 JVM,方法的最大大小限制为 65536 字节。

例如:

public static void test(String... names) {
    System.out.println("Names array length: " + names.length); 
    names[names.length] = "xyz";  // This would fail as expected.

    names = new String[10];   // this however you can do. Re-assign a new array to names 
}

public static void main(String... args) {
    test("a", "b", "c");  // pass 3 arguments
    test("a", "b");       // pass 2 arguments
}
于 2013-10-02T11:40:55.247 回答
0

在将控制权传递给 main() 之前,JVM 会为您设置 String[] 参数,如下所示:

class InternalThingYouDoNotSee {
    String[] args = build args[] from command line
    Class.forName("YourClass").newInstance().getDeclaredMethod("main").invoke(args);
}
class YourClass {
    public static void main(String[] args) {
        /....
    }
}
于 2013-10-02T12:52:40.133 回答
0

它只是一个信息,参数是 type String[],所以它是一个字符串表。它是一种类型,而不是任何类型的初始化。

于 2013-10-02T11:37:50.773 回答