A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

首先主函数是静态的,存在于内存的方法区中,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

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

2 个回复

正序浏览
总结的很好 ,顶一下
回复 使用道具 举报
嗯,支持下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马