为什么我们只在Java中使用(字符串args[])?

为什么我们只在Java中使用(字符串args[])?,java,c++,Java,C++,最近有人在一次考试中问我,为什么我们只在java中使用main(String args[])?为什么我们不在任何其他编程语言中使用main(String args[]) main()和其他塑造应用程序入口点的方法是语言的一部分。在特定语言中使用特定方式的原因是,该语言的作者已经看到了语言运行时系统(如果该语言需要在下面运行操作系统,则为操作系统抽象层)和程序员之间的协议 我可以假设在Java中它是由main(String[]args)生成的,因为该语言在某种程度上受C++的启发(因此main()

最近有人在一次考试中问我,为什么我们只在java中使用main
(String args[])
?为什么我们不在任何其他编程语言中使用main
(String args[])

main()
和其他塑造应用程序入口点的方法是语言的一部分。在特定语言中使用特定方式的原因是,该语言的作者已经看到了语言运行时系统(如果该语言需要在下面运行操作系统,则为操作系统抽象层)和程序员之间的协议

我可以假设在Java中它是由
main(String[]args)
生成的,因为该语言在某种程度上受
C++
的启发(因此
main()
被保留),而
String[]args
这是Java将字符串数组传递到函数中的方法。

关于

“为什么我们不在任何其他编程语言中使用
main(stringars[])

这是一个有缺陷的假设

C#:

//Hello3.cs
//参数:A B C D
使用制度;
公共类Hello3
{
公共静态void Main(字符串[]args)
{
控制台.WriteLine(“你好,世界!”);
WriteLine(“您输入了以下{0}命令行参数:”,
参数(长度);
for(int i=0;i
为什么我们不在任何其他编程语言中使用main(stringars[])

因为你可能喜欢这样做。如果你问你在其他语言(如C++中用它标记了主题)是否< <强> >,答案是:<强>是,你可以< /St>> < C++的语法是:

int main(int argc, char *argv[])
或者-如果您还想包括环境变量:

int main(int argc, char *argv[], char *envp[])

Java有一个内置的字符串类,因此该类的主方法的参数由字符串args[]或字符串数组表示。
在C++中,没有内置的字符串类,因此参数由char *ARGV表示,而它们的计数由int ARC..P/>P>表示。调用应用程序的UNIX接口是将各个命令行令牌收集到一个字符串数组中,并将该数组传递给应用程序的入口点。UNIX定义此入口点命名为“main”,命令行标记将表示为指向C样式以null结尾的字符串的指针数组。由于没有其他方法可以知道数组的大小,因此将数组大小作为单独的参数传递:

main(int argc, char* argv[])
MSDOS和Windows复制了此方案,因此它已成为相当标准的方案


即使Java程序不是直接从操作系统调用的,Java的设计者还是选择使用类似的(熟悉的)范例,命令行标记将作为Java字符串对象数组传递到名为“main”的方法中。

这也是c语言,不是一个很好的考试题:)奇怪的问题。。。我猜你的意思是
String[]args
。无论如何,
String[]args
String[]
是相同的,尽管第一种形式在Java中是首选的。是的,“ars”完全是另一种形式。你确定这就是确切的问题吗?因为在我看来这真的很傻。你应该回答什么?“因为是”?这有点像在问“为什么我们只在英语中使用‘woman’这个词?为什么其他语言使用不同的词?”我不记得MS-DOS模式,但Windows使用单个进程命令行,每个应用程序都可以根据需要解析它。请参阅
GetCommandLine
API函数。还有一个命令行解析函数,它执行标准解析。@Cheersandhth.-Alf-这有点混乱,因为有层。我想,它确实是OS和语言之间的一个“胶粘”层,它负责映射。<>代码> Envp参数是一个普遍支持的但不是C++标准的一部分。
main(int argc, char* argv[])