public static void main(String[] args)
String[] args
是什么?何时会使用这些
args
?
源代码和/或示例优于抽象的解释。
public static void main(String[] args)
String[] args
是什么?
何时会使用这些 args
?
源代码和/或示例优于抽象的解释。
在Java中,args
包含作为String
对象数组提供的命令行参数。
换句话说,如果您在终端中运行程序:
C:/ java MyProgram one two
那么args
将包含["one", "two"]
。
如果您想要输出args
的内容,您只需像这样循环遍历它们...
public class ArgumentExample {
public static void main(String[] args) {
for(int i = 0; i < args.length; i++) {
System.out.println(args[i]);
}
}
}
程序将在终端打印出:C:/ java MyProgram one two
one
two
C:/
这些是 Java 中的命令行参数。
换句话说,如果您运行
java MyProgram one two
那么 args
就包含:
[ "one", "two" ]
public static void main(String [] args) {
String one = args[0]; //=="one"
String two = args[1]; //=="two"
}
这样做的原因是为了配置你的应用程序以特定的方式运行或提供它所需的一些信息。
如果您刚接触Java,我强烈推荐阅读官方的Oracle Java™教程。
args
包含在Java程序调用时传递给程序的命令行参数。例如,如果我这样调用程序:
$ java MyProg -f file.txt
那么args
将是一个包含字符串"-f"
和"file.txt"
的数组。
javac MyProg.java
编译我的代码,然后运行 java MyProg -f file.txt
。这是有原因的吗?因为在答案中没有提到。 - stanimirsp.class
文件。 - mipadi以下答案基于我的理解和一些测试。
String[] args
是什么?
答:
String[]
-> 我们知道这是一个简单的字符串数组。
args
-> 是数组的名称,它可以是任何东西(例如a、ar、argument、param、parameter)编译器没有问题,并且可以正确执行,我也进行了测试。
例如:
public static void main(String[] argument)
public static void main(String[] parameter)
何时使用这些args?
答->
main
函数是开发人员非常巧妙地设计的。实际上,思考非常深刻。 它基本上是在考虑基于命令行参数的C和C++的情况下开发的,但现在没有人再使用它了。
1-用户可以从命令行输入任何类型的数据,可以是数字或字符串,必须由编译器接受,我们应该使用哪种数据类型?请参阅第2个问题
2-字符串是支持所有原始数据类型的数据类型,如Java中的int、long、float、double、byte、short和char。您可以将其轻松解析为任何原始数据类型。
例如:以下程序已编译并执行,我也进行了测试。
如果输入是 -> 1 1
// one class needs to have a main() method
public class HelloWorld
{
// arguments are passed using the text field below this editor
public static void main(String[] parameter)
{
System.out.println(parameter[0] + parameter[1]); // Output is 11
//Comment out below code in case of String
System.out.println(Integer.parseInt(parameter[0]) + Integer.parseInt(parameter[1])); //Output is 2
System.out.println(Float.parseFloat(parameter[0]) + Float.parseFloat(parameter[1])); //Output is 2.0
System.out.println(Long.parseLong(parameter[0]) + Long.parseLong(parameter[1])); //Output is 2
System.out.println(Double.parseDouble(parameter[0]) + Double.parseDouble(parameter[1])); //Output is 2.0
}
}
虽然 OP 只谈到了 String[] args
,但我想给出一个完整的例子:public static void main(String[] args)
。
Public
:是一个访问修饰符,它定义了谁可以访问这个方法。Public 表示该方法将被任何类访问(如果其他类能够访问此类)。
Static
:是一个关键字,用于标识与类相关的事物。这意味着给定的方法或变量不是实例相关的,而是类相关的。它可以在不创建类实例的情况下访问。
Void
:用于定义方法的返回类型。它定义了方法可以返回什么。Void 表示该方法不会返回任何值。
Main
:是方法的名称。JVM 将搜索此方法名称作为具有特定签名的应用程序的起始点。
String[] args
:是主方法的参数。
如果您查看 JDK 源代码(jdk-src\j2se\src\share\bin\java.c):
/* Get the application's main method */
mainID = (*env)->GetStaticMethodID(env, mainClass, "main",
"([Ljava/lang/String;)V");
...
{ /* Make sure the main method is public */
...
mods = (*env)->CallIntMethod(env, obj, mid);
if ((mods & 1) == 0) { /* if (!Modifier.isPublic(mods)) ... */
message = "Main method not public.";
messageDest = JNI_TRUE;
goto leave;
...
你可以看到在Java中启动方法必须命名为main
并且必须具有特定的签名public static void main(String[] args)
代码还告诉我们public static void main(String[] args)
不是固定的,如果你将(jdk-src\j2se\src\share\bin\java.c)中的代码更改为另一个签名,它仍然可以工作,但更改这个可能会导致其他可能的问题,因为Java 规范。
我想要分手
public static void main(String args[])
部分地。
"public" 表示可以从任何地方调用 main()。
"static" 表示 main() 不属于特定的对象。
"void" 表示 main() 不返回任何值。
"main" 是一个函数的名称。main() 很特殊,因为它是程序的起点。
"String[]" 表示 String 数组。
"args" 是 String[] 的名称(在 main() 内部)。"args" 并不特殊;你可以用任何其他名称代替它,程序仍然能正常运行。
String[] args
是一组由空格分隔的字符串,可以在终端上键入到程序中。大多数情况下,初学者不会使用此变量,但它总是在那里以防万一。args
中使用了方括号,而不是在 String
中。这是有意为之吗? - FahimString [] args
是在Java中声明字符串数组的方式。
在这个方法签名中,当方法被调用时,数组args
将被填充值(如此处的其他示例所示)。然而,由于你正在学习,值得理解的是,这个args
数组就像在方法中自己创建一个数组一样,例如:
public void foo() {
String [] args = new String[2];
args[0] = "hello";
args[1] = "every";
System.out.println("Output: " + args[0] + args[1]);
// etc... the usage of 'args' here and in the main method is identical
}
简单易懂的解释。
主方法希望我们在将JVM指向类名时提供一些参数。也就是说,假设你的文件名是Try.java,在命令提示符中执行"javac Try.java"进行编译,然后执行"java Try"运行。现在假设你不仅仅写了"java Try",而是写了"java Try 1",这里你传递了一个参数"1"。即使你的代码中没有使用它,这个参数也会被主方法接收。
如果你想检查主方法是否真的接收了参数"1",只需在主方法内输入以下内容:
for(int i = 0; i < args.length; i++) {
System.out.println("Argument is: "+args[i]);
}
当你完成代码后,你需要将其转换成一个扩展名为.java的文件,可以通过双击运行,也可以通过控制台(mac上的终端,Windows上的cmd.exe)运行,让用户进行许多操作。其中一项是他们可以看到控制台消息(System.out.print或System.out.println),如果他们双击运行则无法看到这些信息。另一件事是他们可以指定参数,因此通常你会使用该行:
java -jar MyCode.jar
在导航到该程序文件夹后,使用
cd C:My/Code/Location
cd My/Code/Location
java -jar MyCode.jar parameter1 parameter2
当从控制台执行Java类时,会调用main方法。为了实现这一点,必须定义此主要方法
public static void main(String [])
java MyClass a b c
这些通常用于定义程序的选项,例如要写入或读取的文件。
args
不一定非要命名为args
(你可以将其命名为任何你想要的名称),但最好遵循惯例。有时你也可能会看到String... args
,这是等效的。 - vikingsteveargs
是否保证由空格分隔? - Paceriermain
方法如何接收参数-首先,参数按照shell规则传递给JVM。大多数shell使用空格进行分割。然后JVM为您初始化一个填充有参数的String[]
。然后将此数组作为参数传递给main
方法。 - MC Emperor