黑马程序员技术交流社区

标题: 看完毕老师的视频,感觉对主函数的理解加深了 [打印本页]

作者: 周坤    时间: 2012-7-17 01:32
标题: 看完毕老师的视频,感觉对主函数的理解加深了
首先主函数是静态的,存在于内存的方法区中,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
作者: 安安的小妖    时间: 2012-7-17 09:07
嗯,支持下
作者: 王达    时间: 2012-7-17 11:10
总结的很好 ,顶一下




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2