黑马程序员技术交流社区

标题: 今天碰到的一个小问题 [打印本页]

作者: 杜天伟    时间: 2012-7-25 08:06
标题: 今天碰到的一个小问题
本帖最后由 adudtw 于 2012-7-26 12:26 编辑

刚看了毕老师的课件PDF,自己练习了一下hello java
先是找不到类,自己解决了,然后发现了一个问题,我以前把主函数
public static void main(String[] args)都写错了
写成了:public static void main(String[] orgs)
神奇的是,这两种写法,都能编译出来,也能运行。
请问这是什么原因
作者: 段应腾    时间: 2012-7-25 08:40
String[] args只是一个字符串数组而已 你也可以写成String args[] 但既然数组名 当然你可以写除关键字以外的任意名称 编译和运行都会通过 args只是写惯了的一种用法而已
作者: 黑马-李勇    时间: 2012-7-25 08:47
args我记得只是一个参数名称,你可以写成s也可以通过的。
作者: 姬仁贵    时间: 2012-7-25 09:22
public static void main(String[] args)

主函数:是一个特殊的函数。作为程序的入口,可以被jvm调用
主函数的定义:
public:代表着该函数访问权限是最大的。
static:代表主函数随着类的加载就已经存在了。
void:主函数没有具体的返回值。
main:不是关键字,但是是一个特殊的单词,可以被jvm识别。
(String[] args):函数的参数,参数类型是一个数组,该数组中的元素是字符串,字符串类型的数组。
主函数是固定格式的:jvm识别。
主函数里面唯一能改动的地方就是String[] args中的args。因为args是一个变量名,变量名是可以自己起的,只要合法就行!


其实你可以通过程序能推出来jvm往主函数里面传的是什么:
class MainDemo
{
          public static void main(String[] args)
          {
                  System.out.println(args);
          }
}


作者: 郑正华    时间: 2012-7-25 09:30
本帖最后由 郑正华 于 2012-7-25 09:38 编辑

main(String[] args)的意思是主函数的参数类型是一个数组,该数组中的元素是字符串类型。
args只是一个变量名,早起的java版本这个变量名是arguments,代表参数的意思,后来因为简写就变成了args,因为习惯的原因,后来一直延续下来,大家也就都这么写了,成了一种约定熟成的规定,大家刚开始学习java 写hello  world的时候都以为这是一种固定的格式,其实不然,只要不违反java命名规则,args这个变量名可以随便改。
作者: 乐峰    时间: 2012-7-25 09:52
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当然是最合适的。当然args的名字可以随便取··

作者: 李菁    时间: 2012-7-25 10:50
String[] args是一个字符串数组,用来保存运行main函数时输入的参数。args只是数组名而已,所以你写成orgs也没有关系。
有String args[]的main函数和没有String args[]的main函数,不是同一个函数了,Java没有不带String args[]的main函数。
所以不写String args[]是错误的。
public static void main(String[] args),main方法是程序的入口,里面唯一能改动的也就是args这个数组名了

作者: 张水荣    时间: 2012-7-25 11:24
public static void main(String[] args)是一个函数(方法),它与一般的函数的格式是一样的,

函数的括号里是可以传入参数的。String[] args就是传入main方法中的一个字符串数组。

声名一个变量时,变量名可以由自己自由命名。所以当你把args 写成 orgs 或者写成其它都没问题。

在main方法中如何传入参数呢?

可以这样做:
如果你的类名叫 HelloWorld.java,则在你编译后,
运行时可以输入“ java HelloWorld aaa bbb ccc ddd ”,
后面的“ aaa bbb ccc ddd ”会以参数的形式输给main函数。
作者: 黑马-李勇    时间: 2012-7-25 13:00
import java.lang.Math.*;
public class demo
{

        public static void main(String[] args)
        {
        for(int i=0;i<args.length;i++)
                System.out.println(args[i]);
                }

}
D:\Java\jdk1.6.0_10\bin>javac demo.java

D:\Java\jdk1.6.0_10\bin>java demo s,r,t,j,i,ok,l,l
s,r,t,j,i,ok,l,l
args只是一个参数名,就象你给变量起名字一样,String [] args 是一个名称叫args的String类型的数组。运行时可以传入值。就象前几年玩的暗黑2里面DIABLO II.exe -w会启动一个小窗口的游戏,而不是全屏幕的。
作者: 杨康    时间: 2012-7-25 13:54
args只是arguments的缩写形式,只是一个变量名而已,可以随便写.
作者: 包晗    时间: 2012-7-25 13:59
arguments 参数 的意思
这都可以随意的  
不过是老外的母语...
中国人看多了 也习惯了
作者: sun~~    时间: 2012-7-25 14:42
因为args是一个变量名,变量名是可以自己起的,只要合法就行!
args是arguments简写,方便我们编程。


作者: 牛少锋    时间: 2012-7-25 15:09
public static void main(String[] args)
程序启动时,jvm虚拟机会去调用main主函数,内部也是通过反射机制调用的,
反射机制生成的Method方法需要传递的参数是String[].class,
而主数里的args只是个引用,在反射调用时是与引用的参数名无关的,
哥们到后面看到反射时就知道原因了
作者: 杜天伟    时间: 2012-7-25 20:34
姬仁贵 发表于 2012-7-25 09:22
public static void main(String[] args)

主函数:是一个特殊的函数。作为程序的入口,可以被jvm调用。

执行出来是这个结果
[Ljava.lang.String;@16e1fb1
作者: 李建锋    时间: 2012-10-13 19:54
小样,长进了,嘛!
作者: 班志国    时间: 2012-10-13 19:58
args 这里 写啥 都行 是自定义的  老外 原
先是写的 arguments 后来嫌麻烦 简写成args    你写 x   写 y 写 “阿猫”“ 阿狗” 都行
就相当于 int b=0; int 后的变量名 是自定义的  【望采纳】




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