JAVA语言的main函数
public static void main(String[] args){…}
下面分别解释这些关键字的作用:
(1)public关键字,这个好理解,声明主函数为public就是告诉其他的类可以访问这个函数。
(2)static关键字,告知编译器main函数是一个静态函数。也就是说main函数中的代码是存储在静态存储区的,即当定义了类以后这段代码就已经存在了。如果main()方法没有使用static修饰符,那么编译不会出错,但是如果你试图执行该程序将会报错,提示main()方法不存在。因为包含main()的类并没有实例化(即没有这个类的对象),所以其main()方法也不会存。而使用static修饰符则表示该方法是静态的,不需要实例化即可使用。但是不管声明不声明static类型,main函数都有方法区。
(3)void关键字表明main()的返回值是无类型。
**(4)参数String[] args,这是本文的重点。
第一、程序使用者可以在命令行状态下向某个类传递参数。看下面的例子:
public class ArgsDemo {
public static void main(String[] args) {
String str = new String();
for (int i = 0; i < args.length; i++) {
System.out.println(args[i]);
str += args[i];
}
System.out.println(str);
}
}
使用javac ArgsDemo.java命令生成ArgsDemo.class文件;然后使用“java ArgsDemo 参数一
参数二 参数三 …”的格式向ArgsDemo类传递参数。该示例程序将首先输出参数,然后输出所有参数的和。比如java ArgsDemo
a b c,将得到这样的输出:
a
b
c
abc
需要注意的是,如果这里的循环条件不是i <5,则在命令行中输入的参数必须是5个,否则将会报错,错误类型为:
Exception in thread “main”
java.lang.ArrayIndexOutOfBoundException:3
at ArgsDemo.main(ArgsDemo.java:5)
第二、可以在另一个类中向包含main()的类传递参数,如下例:
public class A {
public static void main(String[] args)
{
for(int i=0;i
System.out.println(args[i]);
}
}
public class B {
public static void main(String[] args)
{
c = new A();
String[] b = {"111","222","333"};
c.main(b);重点在此
}
}
首先定义一个class
A,在A中定义一个main()函数,在该函数中输出参数args。然后定义一个classB,在B中初始化一个A的实例c,然后向c传递参数,并且调用c的main方法打印出传入的参数值。输出结果如下:
111
222
333
由于main()函数是静态函数,即不需要实例化也能使用,所以B使用下面的写法也能完成相同的功能:
public class B {
public static void main(String[] args)
{
//A c = new A();
String[] b = {"111","222","333"};
A.main(b);
}
}
总结:参数args的主要作用是为程序使用者在命令行状态下与程序交互提供了一种手段。此外在其他类中直接使用main()函数,并传递参数也是可行的,虽然这种方法不太常用,但毕竟为我们提供了一种选择。
C++里面的main()函数
C++标准允许主函数main()有或没有参数列表。您能在主函数main()中使用一个或更多的参数。如下是一些惯例:
int main(int argc, char *argv[])第一个参数argc,指明有多少个参数将被传递给主函数main(),真正的参数以字符串数组(即第2个参数argv[])的形式来传递。每一个字符串均有自己意思。在这句法上面,记住, argc代表参数的数量, main()函数本身是在索引0为的第一参数。所以, argc总是至少为1。它的总数是从argv列阵的元素数目。argv第一个参数是函数名,以后是参数,可以传递参数。这意味着, argv[0]的值是至关重要的。如果用户在控制台环境中程序名称后键入含参数的指令,那么随后的参数将传递给argv[1]。例如,如果程序名称为main,并且已经事先编译好了,这时如果用户键入:
D:/MyPrograms/AConsoleApp/main 68值68将会传递给argv[1]当然取决于你怎么样来编写程序了,也许你的用户将可以输入如下指令:D:/MyPrograms/AConsoleApp/main 68 1250.50因为参数argv是一些字符串,将这些字符串转换为你需要的值就是我们程序员的任务了。所以用户输入下面这样的指令:D:/MyPrograms/AConsoleApp/main 68 1250.50并不意味着68是一个整形,而1250.50是一个double,当然C/C++编译器为我们提供了一些转换函数,你可以用atoi()函数把字串68转换为整形。同样,你可以用atof()函数把字串1250.50转换为double类型如果用户输入一个字符,值将用单引号,如果是字符传将用双引号。用这种技术,用户将被允许使用数字、字符及字符串作为程序的参数来运行程序。1为了演示在主函数main()中使用数字参数,改变上例代码如下:#include using namespace std;
int main(int argc, char *argv[])
{
double Operand1, Operand2, Addition;
Operand1 = atoi( argv[1] );
Operand2 = atoi( argv[2] );
Addition = Operand1 + Operand2;
cout << "/nFirst Number: " << Operand1;
cout << "/nSecond Number: " << Operand2 <<
endl;
cout << Operand1 << " + " << Operand2 << "
= " << Addition << endl;
return 0;
}保存文件,关闭VC工程,在命令行下输入CL
main.cpp回车,这时生成了新的main.exe程序,再在命令行输入main
48.52 1205回车,你会看到如下运行结果:
----------------------------------------------D:/MyProgram2/AConsoleApp>main 48.52 1205
First Number: 48
Second Number: 1205
48 + 1205 = 1253
D:/MyProgram2/AConsoleApp>]
-----------------------------------------------------------------
2为了演示字符串参数情况,改变代码如下:#include using namespace std;
int main(int argc, char *argv[])
{
char Sentence[40];
strcpy(Sentence, argv[1]);
cout << "You typed " << Sentence<<
endl;
return 0;
}然后再CL
main.cpp编译后输入指令main
www.czvc.com回车后有:
---------------------------------------------D:/MyProgram2/AConsoleApp>main www.czvc.com
You typed www.czvc.com
D:/MyProgram2/AConsoleApp>
-------------------------------------------------------------3最后再看一例字串和数字并用的情况,改变代码如下:#include using namespace std;
int main(int argc, char *argv[])
{
char FullName[40], strGender[20];
char cGender[10];
float Salary;
strcpy(FullName, argv[1]);
Salary = atof(argv[2]);
strcpy(cGender, argv[3]);
if( cGender == "m" || cGender == "M" )
strcpy(strGender, "Male");
else if( cGender == "f" || cGender == "F" )
strcpy(strGender, "Female");
else
strcpy(strGender, "Unknown Gender");cout
<< "Employee Information";
cout << "/nFull Name: " << FullName;
cout << "/nGender: " << strGender;
cout << "/nSalary: " << Salary << endl;
return 0;
}然后再CL
main.cpp编译后输入指令main
"WWW.CZVC.COM, LOOMMAN NETWORKS" 18.52 "M"回车后有:
-----------------------------D:/MyProgram2/AConsoleApp>main "WWW.CZVC.COM, LOOMMAN NETWORKS"
18.52 "M"
Employee Information
Full Name: WWW.CZVC.COM, LOOMMAN NETWORKS
Gender: Unknown Gender
Salary: 18.52
来自http://blog.sina.com.cn/s/blog_72827fb10101fu6l.html