java day005 main入口函数中的String[] args 是什么??
初学Java就有一个很深的疑惑,为什么Java的入口函数这么长一大串???一直放那不管就会一直有疑惑,所以通过搜索、查阅总算知道了点东西,下面总结一下。
public static void main(String[] args) {}
public 公开的,表示main函数可以被其他的类访问;
static 静态的,表示main是一个静态方法,不需要实例化便可使用。一般来说,要运行一个类的方法,需要先创造一个类的对象,通过"对象名.方法名()"来运行方法,但是因为main是入口函数,无法先创造对象,所以声明为static,这样就可以直接通过"类名.方法名()"的方式调用。
void 表示main方法无返回值类型。
String[] args 是什么?
string[]是字符串数组类型,而args是字符串数组变量名。
args是arguments简写,用来存储命令行参数,一般来讲我们在main方法中用不上这个参数,但是它是必须的。
示例
/*
入口函数初解析
*/
class ArgsTest {
public static void main(String[] args) {
System.out.println("Hello World!");
for (int i = 0; i < args.length; i++) {
System.out.println(args[i]);
}
}
}
/*
输出结果:
D:\MyJavaCode\java day005 自学入口函数>java ArgsTest
Hello World!
D:\MyJavaCode\java day005 自学入口函数>java ArgsTest 1 11 1
Hello World!
1
11
1
D:\MyJavaCode\java day005 自学入口函数>java ArgsTest hello world
Hello World!
hello
world
D:\MyJavaCode\java day005 自学入口函数>java ArgsTest 哈喽 我的
Hello World!
哈喽
我的
D:\MyJavaCode\java day005 自学入口函数>java ArgsTest 1111111111111111
Hello World!
1111111111111111
*/
可以看出,我们在编译后得到ArgsTest.class文件,可以使用java ArgsTest 参数1 参数2 参数3的方式向ArgsTest 类传递数据。
那么我们不加这个形参会怎么样?
示例
/*
入口函数初解析 不加形参
*/
class ArgsTest2 {
public static void main() {
System.out.println("Hello World!");
}
}
/*
输出结果:
D:\MyJavaCode\java day005 自学入口函数>java ArgsTest2
错误: 在类 ArgsTest2 中找不到 main 方法, 请将 main 方法定义为:
public static void main(String[] args)
否则 JavaFX 应用程序类必须扩展javafx.application.Application
*/
可以看出如果不加String[] args这个形参是不行的,会报错。
那么 args 能改吗? 是可以改的。
/*
入口函数初解析
*/
class ArgsTest1 {
public static void main(String[] akk) {
System.out.println("Hello World!");
for (int i = 0; i < akk.length; i++) {
System.out.println(akk[i]);
}
}
}
/*
输出结果:
D:\MyJavaCode\java day005 自学入口函数>javac ArgsTest1.java
D:\MyJavaCode\java day005 自学入口函数>java ArgsTest 333 444
Hello World!
333
444
*/
我们会发现当改变main方法中的args时,编译其实不会出错并且程序也能顺利运行。args只是大家约定俗成这么写而已,为了避免歧义与误读。
总结
-
string[] args是main方法的形参,用来传递命令行参数。
-
args只是变量名,可以改变。(但是大家一般都默认为args)。
-
main方法括号中不能不加String[] args,否则程序会报错,这是一个规定。