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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杜天伟 中级黑马   /  2012-7-25 08:06  /  3807 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 adudtw 于 2012-7-26 12:26 编辑

刚看了毕老师的课件PDF,自己练习了一下hello java
先是找不到类,自己解决了,然后发现了一个问题,我以前把主函数
public static void main(String[] args)都写错了
写成了:public static void main(String[] orgs)
神奇的是,这两种写法,都能编译出来,也能运行。
请问这是什么原因

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 给新同学一个鼓励!

查看全部评分

15 个回复

倒序浏览
String[] args只是一个字符串数组而已 你也可以写成String args[] 但既然数组名 当然你可以写除关键字以外的任意名称 编译和运行都会通过 args只是写惯了的一种用法而已
回复 使用道具 举报
args我记得只是一个参数名称,你可以写成s也可以通过的。
回复 使用道具 举报
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);
          }
}

评分

参与人数 2技术分 +1 黑马币 +1 收起 理由
韦念欣 + 1 赞一个!
杜天伟 + 1 很给力!

查看全部评分

回复 使用道具 举报
本帖最后由 郑正华 于 2012-7-25 09:38 编辑

main(String[] args)的意思是主函数的参数类型是一个数组,该数组中的元素是字符串类型。
args只是一个变量名,早起的java版本这个变量名是arguments,代表参数的意思,后来因为简写就变成了args,因为习惯的原因,后来一直延续下来,大家也就都这么写了,成了一种约定熟成的规定,大家刚开始学习java 写hello  world的时候都以为这是一种固定的格式,其实不然,只要不违反java命名规则,args这个变量名可以随便改。
回复 使用道具 举报
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:12
7#
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这个数组名了
回复 使用道具 举报
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函数。
回复 使用道具 举报
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会启动一个小窗口的游戏,而不是全屏幕的。
回复 使用道具 举报
args只是arguments的缩写形式,只是一个变量名而已,可以随便写.
回复 使用道具 举报
arguments 参数 的意思
这都可以随意的  
不过是老外的母语...
中国人看多了 也习惯了
回复 使用道具 举报
sun~~ 中级黑马 2012-7-25 14:42:13
12#
因为args是一个变量名,变量名是可以自己起的,只要合法就行!
args是arguments简写,方便我们编程。

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

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

执行出来是这个结果
[Ljava.lang.String;@16e1fb1
回复 使用道具 举报
李建锋 黑马帝 2012-10-13 19:54:10
15#
小样,长进了,嘛!
回复 使用道具 举报
args 这里 写啥 都行 是自定义的  老外 原
先是写的 arguments 后来嫌麻烦 简写成args    你写 x   写 y 写 “阿猫”“ 阿狗” 都行
就相当于 int b=0; int 后的变量名 是自定义的  【望采纳】
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马