我不会问(String args[])
是什么,因为这里已经回答:What is "String args[]"? parameter in main method Java。
我的问题是为什么在编写main()时有必要编写它?
我参加了实践考试,在那里我遇到了一个问题并意识到在写String args[]
时我没有写public static void main()
。但是在写完main(String args[])
之后,问题就解决了。 (我怎么以及为什么还不知道!)
同一天,我被问到Viva,我被问到 - "是否有必要在撰写String args[]
时写下main()
?"并且由于发生的错误,我回复了#34;是"当被问及时为什么没有回答"为什么?"。
所以我想知道为什么有必要编写String [] args 。
答案 0 :(得分:2)
来自Java Language Specification 12.1.4
方法
main
必须声明为public
,static
和void
。它必须指定一个形式参数(第8.4.1节),其声明的类型是String
的数组。因此,可以接受以下任一声明:
public static void main(String[] args)
public static void main(String... args)
(请注意,在同一个类中,main
和String[]
不能有两个String...
方法,因为varargs只是编译时的语法糖时间将被数组替换,因此最终会有两个方法处理String[]
,一个类不能有两个方法具有相同的名称和参数)
所以当你执行像
这样的命令时java YourClass foo bar
Java虚拟机会将foo
和bar
参数放在String[]
数组中,并尝试将该数组传递给main
方法,该方法可以将其作为参数接受。
当命令没有像
这样的参数时,也会使用此方法java YourType
这个决定简化了我们的生活,因为我们不需要专注于处理有两个入口点的案例
我们可以简单地允许用户传递参数,但如果我们不想处理它们,我们可以简单地忽略它们。
还要记住,我们被允许在我们的类中拥有任何具有适当声明的方法(并且不违反从超类继承的任何规则,如扩展成员可见性 - 我们不能使受保护的方法公开),所以没有什么
错了public static void main(){
/*your code*/
}
但您需要意识到此方法不能用作入口点,因此如果您想从此方法启动应用程序,则需要创建正确的main
方法这将执行您的 main()
方法:
public static void main(String ...){
main();
}
答案 1 :(得分:1)
这是命令参数。如果没有它们,JVM必须在尝试调用方法之前执行检查以查看方法是否包含参数,确定它是否可以执行main()
或main(args)
(两种语法正确的方法,具有不同的方法叫他们)
答案 2 :(得分:1)
在Java中,入口点必须是main()
方法。这就是您运行课程时所调用的内容。不会调用没有参数的main(String[])
方法。如果命令中没有参数,则只需使用长度为0的数组调用[]
。
要解决Viva问题,参数的标识符仅由编译器使用,可以更改,以及String...
的替代放置或使用public static void main(String[] args)
指定数组。所以它似乎是技术性的,但你可以使用以下任何一种:
public static void main(String args[])
public static void main(String... args)
public static void main(String[] custom_identifier)
public static void main(String custom_identifier[])
public static void main(String... custom_identifier)
name