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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陆旭东 中级黑马   /  2013-3-25 20:34  /  1865 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陆旭东 于 2013-3-27 11:57 编辑

为什么在MyEclipse中定义类时main函数必须在与文件名相同的public类中,而且main函数也必须定义为public static void?

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

6 个回复

倒序浏览
这是java的语法,不管在什么工具中,即便是在txt文档中书写java代码,也是这个格式

评分

参与人数 2技术分 +1 黑马币 +2 收起 理由
陈丽莉 + 1
陆旭东 + 2

查看全部评分

回复 使用道具 举报
为什么在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-26 18:08
不错 随便学习  发表于 2013-3-26 08:44

评分

参与人数 2技术分 +1 黑马币 +10 收起 理由
陈丽莉 + 1 不好意思,刚来北京,漏了不少帖子。。.
陆旭东 + 10 赞一个!

查看全部评分

回复 使用道具 举报
规定就是规定

评分

参与人数 1黑马币 +2 收起 理由
陆旭东 + 2

查看全部评分

回复 使用道具 举报
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天的课程

评分

参与人数 2技术分 +1 黑马币 +10 收起 理由
陈丽莉 + 1
陆旭东 + 10 赞一个!

查看全部评分

回复 使用道具 举报
若还有问题,继续追问; 没有的话,尽量及时将帖子分类改成【已解决】~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马