黑马程序员技术交流社区

标题: 主函数问题 [打印本页]

作者: 杨银川    时间: 2011-12-21 00:08
标题: 主函数问题
本帖最后由 杨银川 于 2011-12-21 15:29 编辑

想问一下public static void main(String[] args){}这个是一个java程序的入口,有哪位大侠给我解释一下它啊,他为什么要这么写,括号里的怎么是String[] args ?谢谢
作者: 黑马巩伟伟    时间: 2011-12-21 00:20
主函数:
  是一个特殊的函数,可以被JVM调用,作为程序的入口
主函数的定义:
public :该函数的权限最大
static:代表着主函数随着类的加载就存在了
void:             主函数没有具体返回的值
main:            不是关键字,但是是一个特殊的单词,能被JVM识别
函数的参数:(String[] args),参数类型是一个数组,数组中的
             元素是字符串。
JVM在调用主函数时,传入的是new String[0]
作者: 我心飞翔    时间: 2011-12-21 00:39
这绝对不是凭空想出来的,也不是没有道理的死规定,而是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沿用了这个历史传统。
作者: 郭繁森    时间: 2011-12-21 00:45
public static void main(String[] args){}
  首先:这是规定好的,不能变了。就像我们一出生父母就给我们起好名字了,没办法的事,不要想是先有鸡还是先有蛋这样的问题,照做就是了。
一定要了解的话我就说说自己的理解
JVM找这句话的main作为入口,public是权限修饰符(权限大),这个函数是主函数所以不会给其他函数传递什么变量,所以类型是void,
JVM把这句放在内存里的方法区(共享区),就用静态字static限定,  String是字符串的缩写,代表所传参数的类型(应该包含很多其他类型吧),然后就是args了,它是大家
都写的参数名,写得多了就流传了,可以修改为其他(这是唯一可变的)。

希望帮到你
作者: 张帅    时间: 2011-12-21 00:57
既然大家都从main方法上说了说,那我就从类上说说
一个java文件中,可以有多个类,当编译时,它将生成多个class文件,
java程序是从一个public类的main函数开始执行的,被jvm所识别,所以如果有多个public,那么它将不知道从哪个类开始执行,所以,在一个类文件中,最多只有一个public类,当然也可以没有,
但是如果你想让这个程序单独运行的话,则必须指定这个public的类,java文件的名字要和类一致,当然也可以不写public
以上是我的学习笔记,如有错误请指正
作者: 为梦而战    时间: 2011-12-21 01:26
主函数是JVM的入口,作用是保证类的独立运行。
public:表示主函数是公共的,谁都可以调用它,
static:把主函数定义成静态的,加载类的时候把它也加载进来,这样JVM运行包含主函数的类时才有了入口,才知道要运行的类从哪开始运行
void :表示主函数是被调用并运行其中的代码而没有返回值
main:不是关键字,但却是一个能被JVM所识别的特殊的名称,不能改,如果改了的话,编译可以通过,但运行时,JVM会因找不到main,而提示此方法找不到。
String[] args:是一个接收字符串的字符串数组,做为参数接收JVM调用主函数时传递来的实参。当然数组名args是可以修改的,但一般还是用它了。

总之:主函数的格式除了args,可以修改外,其它的都是固定格式。

作者: chujitao1    时间: 2012-4-7 08:00
{:soso_e163:}




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