首先主函数是静态的,存在于内存的方法区中,public static void main(String[] args);
其中main不是关键字,但是一个特殊的单词,可以被jvm识别。
(String[]args)函数的参数,参数类型是一个数组,该数组中元素是字符串。
主函数是固定格式的,jvm需要识别,程序的入口,所以不能没有。
如果main()方法没有使用static修饰符,那么编译不会出错,但是如果你试图执行该程序将会报错,提示main()方法不存在。
public class StaticMainDemo{
public static void main(String[] args)//args 可以改成其他形式,只要是字符串即可。比如(String[] 中国)同样没有问题,只是形参。arguments 参数的的意思,args缩写。
{
System.out.println("haha");
//MainDemo.main();调用静态方法。
//MainDemo.main(args);运行将无限循环,报错。但同样可以编译。
}
public staitc void main(){//重载了主函数,可以编译通过。
System.out.println("heihei");
}
}
此类可以编译运行,打印haha。
若是将第一个函数,即主函数去掉,此类可以编译,但没有入口无法运行。public static void main(String[] args,int b)同样如此,可见jvm只认主函数一种格式。
那么虚拟机传到主函数的实参是什么呢?
可以把输出语句改为System.out.println(args);输出结果为[Ljava.lang.String;@182f0db,表明传入了字符串数组实体,地址名。
那长度呢?System.out.println(args.length);输出结果为0.
表明jvm在调用主函数时,传入的是new String[0];即有0个元素的数组。
public class MainDemo {
public static void main(String[] args){
String[] arr={"haha","hehe","heihei"};
MainTest.main(arr);
}
}
class MainTest{
public static void main(String[] args){
for(int i=0;i<args.length;i++)
{
System.out.println(args[i]);
}
}
输出结果为haha
hehe
heihei |