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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© joker_chan 中级黑马   /  2013-5-18 11:15  /  1768 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 joker_chan 于 2013-5-18 12:53 编辑

突然想到为什么主函数要用public static void main(String[] args)这样的写法。为什么要用static的。

14 个回复

倒序浏览
{:soso_e117:}经典
回复 使用道具 举报
刘学明    发表于 2013-5-18 11:20
经典

额。知道给我解释下吧 。不然心里就一起想。
回复 使用道具 举报
这是规定,程序的唯一入口,主函数,必须这样写。
回复 使用道具 举报
静态,以上来就装入内存

main函数其实也是所在类的一个方法,就比如一个类是test,那么该类的main其实就是test.main(String[] args),众所周知如果一个方法不是静态的,则要先实例化该类,比如要这样 test t=new test();
然后才能调用 test.main();
而这对于运行一个程序的主函数来说是不现实的,所以比如把main函数定义为static,使test.main()可以直接被调用。

因为main就是这个类的主函数,入口,如果每次进这个入口的时候再去实例话然后再去调用这个入口方法,就很罗嗦
回复 使用道具 举报
刘学明    发表于 2013-5-18 11:27
静态,以上来就装入内存

main函数其实也是所在类的一个方法,就比如一个类是test,那么该类的main其实就 ...

:lol这样的啊 。谢谢咯
回复 使用道具 举报
本帖最后由 slatop@qq.com 于 2013-5-18 12:01 编辑

   我来给你解释一下。
 在早期的过程化编程中,是没有类的概念的。代码都是一行一行执行。功能都封装在函数内被多次调用。后来为了应对日渐复杂的软件要求,一度出现了过程化编程的软件危机问题。后来有个叫肯桑普森的家伙在C语言的基础上加入了类的概念,出现了最早的面向对象化编程。
 换句说话面向对象化编程,换句话说对象编程是从过程编程演变而来的。

 以windows为例,在过程化编程中,当一个程序一被加载,一个进程内核对象产生。所有程序代码被转为二进制形式存放,随时准备被调用。但是众多函数,系统不知道从哪开始执行。所以系统在设计的时候就已经定好了。当一个进程加载后直接调用它的main函数。也叫入口函数。然后能过main函数环环调用,直到程序结束。 

 好main函数的功能搞清楚了再说看java中的main函數。

 你知道,java所有的函數和數據全部封裝在类中。而类必须有对象后其中的方法(也叫函数)和数据才是有效的。系统在加载进程后分配完内核对象不知道建立哪个类对象,也不可能直接去建立对象,这时候系统不知道从哪开始去执行代码。而static是静态的,在没有对象的时候该方法(函数)已经存在,不须要先建立对象。这样就可以让系统找到入口点。

 另外,静态非静态从数据的角度去理解其实没什么差别,他们是相对的。在C语法中静态的作用只是体现在内外部调用上。换个说法就是C语言中的静态就是一个作用域的差别。在C++中静态的用法和java类似,但不完全相同。其主要作用也是为类产生共享数据或方法
回复 使用道具 举报
毕老师讲面向对象的静态部分的时候有讲到,楼主可以look下
俺们是黑马云青年{:soso_e182:}
回复 使用道具 举报
真经典,我在上课的时候也听过有学生这么问老师的。
呵呵,我也听好多程序员说过:java是一个面向对象语言,他已经封装好了好多的方法。有些时候没必要去钻牛角的去研究了。
给出一个方法,你只要知道他的作用是什么。该如何使用。在什么情况下使用就可以了。
我曾经也追问过,回头想想毫无意义!
就像汽车一样,不用管他是如何生产出来的,只要车的性能好,会驾驶。就驾驶出来,使用了。。
回复 使用道具 举报
如果问题已解决,请及时修改分类,否则继续提问,谢谢合作!
回复 使用道具 举报
韩秀山 发表于 2013-5-18 12:11
真经典,我在上课的时候也听过有学生这么问老师的。
呵呵,我也听好多程序员说过:java是一个面向对象语言 ...

恩。好的。好的。
回复 使用道具 举报
神之梦 发表于 2013-5-18 12:00
毕老师讲面向对象的静态部分的时候有讲到,楼主可以look下
俺们是黑马云青年 ...

谢谢咯 还没有看到那里去。学校学的是JAVA。不过学的很烂。现在想去黑马。在准备中。
回复 使用道具 举报
slatop@qq.com 发表于 2013-5-18 12:00
我来给你解释一下。
 在早期的过程化编程中,是没有类的概念的。代码都是一行一行执行。功能都封装在函 ...

这个听的很清楚 明白了。
回复 使用道具 举报
明天,你好 发表于 2013-5-18 11:25
这是规定,程序的唯一入口,主函数,必须这样写。

我也知道必须这样写啊
回复 使用道具 举报
刘学明    发表于 2013-5-18 11:27
静态,以上来就装入内存

main函数其实也是所在类的一个方法,就比如一个类是test,那么该类的main其实就 ...

赞!很厉害,这都知道!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马