黑马程序员技术交流社区

标题: 一个关于MyEclipse的问题? [打印本页]

作者: 陆旭东    时间: 2013-3-25 20:34
标题: 一个关于MyEclipse的问题?
本帖最后由 陆旭东 于 2013-3-27 11:57 编辑

为什么在MyEclipse中定义类时main函数必须在与文件名相同的public类中,而且main函数也必须定义为public static void?
作者: 胡国彬    时间: 2013-3-25 20:46
这是java的语法,不管在什么工具中,即便是在txt文档中书写java代码,也是这个格式
作者: TK13761    时间: 2013-3-25 20:55
为什么在MyEclipse中定义类时main函数必须在与文件名相同的public类中
--------
因为
当你运行一个java文件的时候 编译器要找到一个程序的入口,这个入口就是
main函数,如果你的文件中包含多个类,那么最多只能有一个public的类,而
且文件名必须与public的类名相同。所以必须定义在与文件名相同的public类中
-------
而且main函数也必须定义为public static void
------------
因为
java编译或运行时是找public修饰符类下面的main方法,
static关键字,告知编译器main函数是一个静态函数。
也就是说main函数中的代码是存储在静态存储区的,即当定义了类以后这段代码就已经存在了。
如果main()方法没有使用static修饰符,那么编译不会出错,但是如果你试图执行该程序将会报错,
提示main()方法不存在。因为包含main()的类并没有实例化(即没有这个类的对象),所以其main()
方法也不会存。而使用static修饰符则表示该方法是静态的,不需要实例化即可使用。

欢迎指正补充
作者: 李红志    时间: 2013-3-25 23:24
规定就是规定
作者: 董霁辉    时间: 2013-3-26 14:50
1 Java中规定在一个java源文件中第一个类如果使用了public修饰,那么文件名必须与这个类名相同.如 public class Test{} 此时,文件名必须为Test.java且区分大小写否则编译失败,因为类Test是公共的.如果不用public修饰,那么文件名只要合法(符合操作系统要求)即可.但运行时必须要写类的名字且区分大小写.如java Test.
2 public static void //每一个关键字都有自己的含义分别为:公共的 静态的 没有返回值.
java虚拟机在加载类后就会找且一定找public static void main(String[] args)//其实那个args就是个形参,大家都这么写,我们也就这么写吧
还可以这样理解 java虚拟机加载完类后要找程序的入口,main虽然不是关键字,但他是jvm的入口,这个入口必须是一个公共的且没有返回值,可以这样想,如果这个方法有返回值的话,那么他返回的东西给了jvm,jvm岂不是哭了,他都不知道那个东西是干嘛的.再说说static 静态的.静态方法是随着类加载而加载,优先于对象.

综上:public static void main(String[] args)就是jvm 要找一个公共的类且类加载了就能使用的没有返回值的main方法.

PS: 一个java源文件中有且只能有一个public修饰的类. public 指公开的访问权限最大  建议复习下毕老师讲的面向对象 5、6、7 3天的课程
作者: 陈丽莉    时间: 2013-3-27 11:55
若还有问题,继续追问; 没有的话,尽量及时将帖子分类改成【已解决】~




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