我试图在main函数中调用main函数,我已经尝试了以下代码并成功编译了代码。
class test
{
static int i = 0;
public static void main(String args[])
{
String asda[] = {"!2312"};
if (++i == 1)
main(asda);
}
}
但是在以下代码的情况下会发生错误:
class test
{
static int i = 0;
public static void main(String args[])
{
if (++i == 1)
main({"!2312"});
}
}
这让我很困惑。令人困惑的是,字符串数组初始化是像String A[]={"asdf","Asdf");
那样完成的,那为什么它在第二种情况下会出错呢?
我使用的是java 8u40。
答案 0 :(得分:3)
您正在寻找的语法是:
main(new String[]{"!2312"});
在你的第一个例子中,Java足够聪明,知道你正在创建一个String数组,因为它在String []声明部分。但是,由于你在第二个例子中没有那个,所以Java不够聪明,不知道它是一个String数组,还是一个Objects数组。所以你需要通过包含String []部分来专门告诉Java它是一个String数组。
编辑:我还会注意到您可以使用 varargs 而不是数组作为main()方法的参数:
public static void main(String... args){
然后你可以使用String文字而不是数组来调用main()方法,就像这样:
main("!2312");
您的整个程序可能如下所示:
public class Main{
static int i = 0;
public static void main(String... args){
if (++i == 1){
main("!2312");
}
}
}
这稍微超出了你的问题范围,但你知道可能会有用。
答案 1 :(得分:2)
{"!2312"}
等文字的问题在于它们没有类型信息。例如,Java无法知道您是指具有一个值的String[]
还是具有一个值的Object[]
。您需要通过初始化变量来明确指定它:
String asda[]={"!2312"};
if(++i==1)
main(asda);
或致电new
运营商:
if(++i==1)
main(new String[]{"!2312"});
答案 2 :(得分:0)
在您通过
将asda传递给main时的上一代码中main(asda);
asda是一个数组,但{“!2312”}不是数组,主方法接受声明中指定的字符串数组
public static void main(String args[])
其中args是一个数组。所以你应该将数组传递给main。 创建一个数组,然后将该字符串文字放入其中,然后将其传递给main。