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

fea

初级黑马

  • 黑马币:41

  • 帖子:8

  • 精华:0

看视频的时候说这格式是固定不变的,我那天不小心把args记成了argy,然后就写HelloWord,编译通过后又抄在本子上,后面写其他的时候也一直写成argy,是后来继续看视频的时候发现是args才对。为什么我输错了,程序还是可以编译运行

9 个回复

倒序浏览
public static void main(String[] args)

  这绝对不是凭空想出来的,也不是没有道理的死规定,而是java程序执行的需要。

  jvm在试图运行一个类之前,先检查该类是否包含一个特殊方法。这个方法必须是公有的,以便在任何位置都能访问得到。这个方法必须是static的,因为这个方法不能依赖任何该类的实例即可运行,而非static的方法,在运行之前要先创建该类的实例对象。

  这个方法没有返回值。和C/C++程序不一样,java的程序默认都以常态结束,所以main不返回int。如果要以非常态结束程序,可以用System.exit(1)。

  这个方法必须可以接受数目不定的String类型的参数,因为运行者可能要附加运行参数。如java HelloWorld jack 100,这里的jack和100就是运行参数。

  为什么是String呢?因为String具有普遍性。任何字面形式都可以解释成String,而其他类型则不然(如jack就不能解释成整数或浮点数),所以用String来存储参数最合适。而因为参数数目不限一个,所以用了数组,即String[]。在Java 1.5以后,还可以写成String...,表示数目不定。

  至于参数的变量名可以任意,只要保证在方法内部按该变量名来获得参数就行了,从变量的作用角度来说,叫arguments或args当然是最合适的。

  至于这个方法的名字为什么一定是main,有历史原因,因为最早的C以main函数作为程序入口,java沿用了这个历史传统。
下面我们以一个例子一探究竟:

复制代码
package test;
public class MainTest {
   
    public static void main(String[] args)
    {
        for (int x=0; x<args.length; x++)
        {
            System.out.println(args[x]);
        }
        
    }
    public static void sysInfo(){
        System.out.println("call sysInfo()");
        
    }
}
public class MainDemo {
   
    /*
    public static void main(String[] args)
   
    public:权限修饰符,权限最大。
    static:随着MianDemo类的加载而加载,消失而消失。
    void:  没有返回值
    main: 函数名,jvm识别的特殊函数名
    (String[] args):定义了一个字符串数组参数
    */
   
    public static void main(String... args)
    {
        String[] arr = new String[]{"zhang","li","wang","zhao"};
        MainTest.main(arr);
        MainTest.sysInfo();
    }
   
    /*
    总结:
    1、main()函数是被jvm调用,jvm给main()传了一个长度为0的字符串的数组,也就是new String[0]
    2、可以通过类名.main()进行传值操作,因为main()方法是static的。
    */
}
复制代码
运行结果:
zhang
li
wang
zhao
call sysInfo()

回复 使用道具 举报
我把args理解成一个数组名,是String类型的数组,所以main方法还可以写成main(String args[]),它的作用是用来存放向应用程序传递的参数的。我是用这个程序去理解的:
  1. class Test{
  2.   public static void mian(String[] args){
  3.     //循环获得数组args的值,并输出
  4.    for(int i = 0; i<args.length;i++)
  5.    System.out.println("args[i]的值为:"+args[i]);
  6.   }
  7. }
复制代码

要用记事本写好,然后用cmd编译,用cmd运行时,记得把值也赋上,即:java Test 你好 参数
回复 使用道具 举报
只有这个args 可以改变 别的都不能变  ,理解成String数组名字就行
回复 使用道具 举报
Poul 发表于 2016-3-27 15:52
我把args理解成一个数组名,是String类型的数组,所以main方法还可以写成main(String args[]),它的作用是 ...

复制过去后一直编译成功,运行失败,搞半天原来是main
回复 使用道具 举报
hkh3321313 发表于 2016-3-27 15:14
public static void main(String[] args)

  这绝对不是凭空想出来的,也不是没有道理的死规定,而是java ...

懂了,写什么都行,只是写args是最合适的
回复 使用道具 举报
fea 初级黑马 2016-3-28 15:15:47
7#
monZhang 发表于 2016-3-27 21:28
只有这个args 可以改变 别的都不能变  ,理解成String数组名字就行

已经知道了
回复 使用道具 举报
虽然看的有点懵
回复 使用道具 举报
Poul 中级黑马 2016-3-28 17:17:28
9#
fea 发表于 2016-3-28 15:11
复制过去后一直编译成功,运行失败,搞半天原来是main

啊~抱歉~抱歉~老毛病~对不起哈~
回复 使用道具 举报
hkh3321313 来自手机 中级黑马 2016-3-28 21:33:45
10#
fea 发表于 2016-3-28 15:14
懂了,写什么都行,只是写args是最合适的

我说的有点啰嗦了⊙▽⊙
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马