转:http://jtzsy.blog.163.com/blog/static/105540269201291794637742/
--------------------------------------------------------------------------------
Java中main()方法以及命令行参数的若干注意
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 虽然编译无错误,但是虚拟机无法启动应用程序。
这里注意JAVA的一个基础知识:
类 XX 是公共的,应在名为 XX .java 的文件中声明,出现这样的编译错误,
因为:一个*.java文件中,只能有一个public类!!!公共类的名字必须和这个类所在文件名称相同···如果main没有在这个.java文件的
public类中,会提示没有主方法,也就说,能编译通过,但是不能执行哦·
2. 关于main()方法中的关键字static
静态方法不能访问实例字段。但可访问自身类中的静态字段。
main方法是且必须是一个静态方法,所以static 必须写。为了不需要构造类实例。如果没有static,运行时出错。
3 . main()方法的返回类型和返回值
main(String[] arg)如果不写void会有编译错误
如果不写static和[]会有运行错误
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");
}
}
如果超过边界访问args[],编译正常,运行出错。
如:
public class Test{
public static void main(String[] args){
String foo=args[1];
String bar=args[2];
String baz=args[3];
}
}
java Test Red Green Blue
what is the value of baz?
A. baz has value of ""
B. baz has value of null
C. baz has value of "Red"
D. baz has value of "Blue"
E. baz has value of "Green"
F. the code does not compile
G. the program throw an exception
Answer:G
5. main()方法只作为Java应用程序的入口。Applet程序不需要main()方法,一般由浏览器不同方式启动,其入口程序一般为init()方法。
6. main可作为普通方法名。
如:
public class Droitwich { class one { private class two { public void main() //注意这里的main方法 { System.out.println("two"); } } } }
显示:编译正常