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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高欢欢 中级黑马   /  2012-7-18 12:02  /  1986 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Main函数是静态,为什么是静态的呀?
不用静态方法的话,用实例化方法,被实例化对象是什么呢?
如果它是成员函数,那么谁来负责创建实例呢?

实在是不懂呀,哪位能详细解释一下么?

5 个回复

倒序浏览
Public  static  void  main(String[]args)
下面分别解释这些关键字的作用:
(1)public关键字,这个好理解,声明主函数为public就是告诉其他的类可以访问这个函数。
(2)static关键字,告知编译器main函数是一个静态函数。
也就是说main函数中的代码是存储在静态存储区的,即当定义了类以后这段代码就已经存在了。
假如main()方法没有使用static修饰符,那么编译不会出错,但是假如你试图执行该程序将会报错,提示main()方法不存在。
因为包含main()的类并没有实例化(即没有这个类的对象),所以其main()方法也不会存。
而使用static修饰符则表示该方法是静态的,不需要实例化即可使用。
(3)void关键字表明main()的返回值是无类型。
回复 使用道具 举报
首先  main函数是整个项目的入口,java规定,main函数必须是Public  static  void  main(String[]args)这个格式的,不然就找不到入口。
其次,main函数既然是入口,肯定就要最先执行 所以它必须是静态的...
然后  在项目中,main函数一般是调用其他方法,而不会被其他方法调用(它已经在最顶层了) 所以没有必要有返回值....
不知道这样讲你能不能理解
回复 使用道具 举报
主函数的一般写法如下:
public static void main(String[] args){…}
下面分别解释这些关键字的作用:
  (1)public关键字,这个好理解,声明主函数为public就是告诉其他的类可以访问这个函数。
  (2)static关键字,告知编译器main函数是一个静态函数。也就是说main函数中的代码是存储在静态存储区的,即当定义了类以后这段代码就已经存在了。如果main()方法没有使用static修饰符,那么编译不会出错,但是如果你试图执行该程序将会报错,提示main()方法不存在。因为包含main()的类并没有实例化(即没有这个类的对象),所以其main()方法也不会存。而使用static修饰符则表示该方法是静态的,不需要实例化即可使用。
  (3)void关键字表明main()的返回值是无类型。

回复 使用道具 举报
我来推理一下:
1、我们的java程序都运行在虚拟机里面的,那么虚拟机怎么运行我们的程序吗?
      虚拟机也是一个程序,我们写的也是一个程序,虚拟机要运行我们的程序,就要调用我们的程序,

2、A程序调用B程序,怎么调用?当然是调用B给A提供的接口了,就像有一个大房子一样,只有这个
        房子给我们提供了门或者窗啊,我们才能通过它提供的门或者窗子进去。
        main方法就是我们程序给外界提供的一扇门。

3、java虚拟机,简称jvm,它看到了这扇门,就可以通过这扇门调用我们程序的内部代码。
为什么main方法:Public  static  void  main(String[] args) 这样写。
① public:不管jvm在哪儿,都可以访问到这扇门,你不信,把main方法改成private,看出什么问题。

②static:类一创建就产生main,就像我一做好房子,就要立刻做好门一样,jvm可不知道怎么帮你
         做一扇门啊。你吧static除掉,看有出什么问题。

③void :jvm到你的房子转悠完了,轻轻的走了,不带走一片云彩。

④String [] args: jvm来的时候,可以给你带一点礼物的

4、jvm只有进了你的房,才可以帮你干活儿,才可以帮你创建实例,调用方法。。。。否则你的程序根本进不了内存的。

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
   首先,成员方法分为静态方法和实例方法。用static修饰的方法叫做静态方法,或类方法,该方法不需要创建类的实例,可通过类名直接访问。

  main()方法必须用static修饰,原因是,把main()方法定义为静态方法。可以使java虚拟机只要加载了main()方法所属的类,就能执行main()方法,而不用先创建这个类的实例。

  不用静态的话,那它只是一个普通的成员方法,你可以通过创建main()方法所属的那个类的实例,然后通过实例调用。这时,是它所属的那个类来负责创建实例的。
  1. package demo;

  2. public class demo {

  3.         /**
  4.          * @param args
  5.          */
  6.         public void main(){//这相当于对main方法的重载
  7.                 System.out.println("Main执行了");               
  8.         }
  9.         public static void main(String[] args) {
  10.                 // TODO Auto-generated method stub
  11.                 demo d = new demo();
  12.                 d.main();
  13.         }
  14. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马