一.
Main 方法是程序的入口点,程序控制在该方法中开始和结束。该方法在类或结构的内部声明。它必须为静态的。它可以具有 void 或 int 返回类型。在 Main 方法中创建对象和调用其他方法。声明 Main 方法时既可以不使用参数,也可以使用参数。后一种形式使程序可以读取命令行参数。
命令行参数请参见
Main | 返回值 | C# 程序的常规结构 | 命令行参数教程
Main 方法可以使用参数,在这种情况下它采用下列形式之一:
static int Main(string[] args)
static void Main(string[] args)
Main 方法的参数是表示命令行参数的 string 数组。通常通过测试 Length 属性来检查参数是否存在,例如:
if (args.Length == 0)
{
Console.WriteLine("Please enter a numeric argument.");
return 1;
}
还可以使用 Convert 类或 Parse 方法将字符串参数转换为数值类型。例如,下面的语句使用 Int64 类上的 Parse 方法将字符串转换为 long 型数字:
long num = Int64.Parse(args[0]);
也可以使用别名为 Int64 的 C# 类型 long:
long num = long.Parse(args[0]);
还可以使用 Convert 类的方法 ToInt64 完成同样的工作:
long num = Convert.ToInt64(s);
有关更多信息,请参见 parse 方法和 Convert 类。
示例
在此示例中,程序在运行时采用一个参数,将该参数转换为一个长数字,并计算该数字的阶乘。如果没有提供参数,则程序发出一条消息来解释程序的正确用法。
// Factorial_main.cs
// arguments: 3
using System;
public class Factorial
{
public static long Fac(long i)
{
return ((i <= 1) ? 1 : (i * Fac(i-1)));
}
}
class MainClass
{
public static int Main(string[] args)
{
// Test if input arguments were supplied:
if (args.Length == 0)
{
Console.WriteLine("Please enter a numeric argument.");
Console.WriteLine("Usage: Factorial <num>");
return 1;
}
// Convert the input arguments to numbers:
try
{
long num = long.Parse(args[0]);
Console.WriteLine("The Factorial of {0} is {1}.",
num, Factorial.Fac(num));
return 0;
}
catch (System.FormatException)
{
Console.WriteLine("Please enter a numeric argument.");
Console.WriteLine("Usage: Factorial <num>");
return 1;
}
}
}
二.
main方法的完整定义语法:public static void main(String[] args){}
命令行格式:java [命令参数] 文件名 [args[0](用户参数) args[1] ... 比如 java - cs AClass a b c<enter>
1. 关于main()方法中的修饰符public
java虚拟机规范并没有要求main一定是public的,所以public可以省略,它只是为了main()方法可以从任意一个java运行环境中调用。不过没有public 虽然编译无错误,但是虚拟机无法启动应用程序。
2. 关于main()方法中的关键字static
静态方法不能访问实例字段。但可访问自身类中的静态字段。
main方法是且必须是一个静态方法,所以static 必须写。为了不需要构造类实例。如果没有static,运行时出错。
3 . main()方法的返回类型和返回值
main()方法并不向操作系统返回“退出代码”。java中,如果main方法正常退出,Java程序的退出代码为0,表示成功地执行完程序。若要用不同的退出代码终止程序,则使用System.exit方法。
因为main()方法是可以重载的,所以返回类型可以void ,int ,boolean... 但如果从应用程序的入口main()方法的角度看,则只能用void返回。
4. main()方法及命令行参数相联系的若干注意
当缺少String[]args时,虽然编译可以通过,但是运行时无法获取有效的main方法,运行时候会报错。其中方法参数名字args可以改变。
要知道知道String数组长度,可以直接用args.length即可。
当没有用户参数的时候,如果进行args[0]等的访问,会抛出一个数组越界异常。
如下操作,由于main()方法的参数类型正确,所以编译可以通过,但运行时会出错。
public class Test
{
public static void main(String argv)
{
System.out.println("hello cruel world");
}
}
5. main()方法只作为Java应用程序的入口。Applet程序不需要main()方法,一般由浏览器不同方式启动,其入口程序一般为init()方法。