黑马程序员技术交流社区
标题:
Main函数的问题
[打印本页]
作者:
高欢欢
时间:
2012-7-18 12:02
标题:
Main函数的问题
Main函数是静态,为什么是静态的呀?
不用静态方法的话,用实例化方法,被实例化对象是什么呢?
如果它是成员函数,那么谁来负责创建实例呢?
实在是不懂呀,哪位能详细解释一下么?
作者:
孙新强
时间:
2012-7-18 12:12
Public static void main(String[]args)
下面分别解释这些关键字的作用:
(1)public关键字,这个好理解,声明主函数为public就是告诉其他的类可以访问这个函数。
(2)static关键字,告知编译器main函数是一个静态函数。
也就是说main函数中的代码是存储在静态存储区的,即当定义了类以后这段代码就已经存在了。
假如main()方法没有使用static修饰符,那么编译不会出错,但是假如你试图执行该程序将会报错,提示main()方法不存在。
因为包含main()的类并没有实例化(即没有这个类的对象),所以其main()方法也不会存。
而使用static修饰符则表示该方法是静态的,不需要实例化即可使用。
(3)void关键字表明main()的返回值是无类型。
作者:
蒋映辉
时间:
2012-7-18 12:33
首先 main函数是整个项目的入口,java规定,main函数必须是Public static void main(String[]args)这个格式的,不然就找不到入口。
其次,main函数既然是入口,肯定就要最先执行 所以它必须是静态的...
然后 在项目中,main函数一般是调用其他方法,而不会被其他方法调用(它已经在最顶层了) 所以没有必要有返回值....
不知道这样讲你能不能理解
作者:
乞文超
时间:
2012-7-18 12:45
主函数的一般写法如下:
public static void main(String[] args){…}
下面分别解释这些关键字的作用:
(1)public关键字,这个好理解,声明主函数为public就是告诉其他的类可以访问这个函数。
(2)static关键字,告知编译器main函数是一个静态函数。也就是说main函数中的代码是存储在静态存储区的,即当定义了类以后这段代码就已经存在了。如果main()方法没有使用static修饰符,那么编译不会出错,但是如果你试图执行该程序将会报错,提示main()方法不存在。因为包含main()的类并没有实例化(即没有这个类的对象),所以其main()方法也不会存。而使用static修饰符则表示该方法是静态的,不需要实例化即可使用。
(3)void关键字表明main()的返回值是无类型。
作者:
张世威
时间:
2012-7-18 12:59
我来推理一下:
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只有进了你的房,才可以帮你干活儿,才可以帮你创建实例,调用方法。。。。否则你的程序根本进不了内存的。
作者:
王宝康
时间:
2012-7-18 13:54
首先,成员方法分为静态方法和实例方法。用static修饰的方法叫做静态方法,或类方法,该方法不需要创建类的实例,可通过类名直接访问。
main()方法必须用static修饰,原因是,把main()方法定义为静态方法。可以使java虚拟机只要加载了main()方法所属的类,就能执行main()方法,而不用先创建这个类的实例。
不用静态的话,那它只是一个普通的成员方法,你可以通过创建main()方法所属的那个类的实例,然后通过实例调用。这时,是它所属的那个类来负责创建实例的。
package demo;
public class demo {
/**
* @param args
*/
public void main(){//这相当于对main方法的重载
System.out.println("Main执行了");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
demo d = new demo();
d.main();
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2