黑马程序员技术交流社区

标题: main方法与虚拟机的关系 [打印本页]

作者: 贾振凯    时间: 2013-2-24 16:47
标题: main方法与虚拟机的关系
       在Java中,main()方法是Java应用程序的入口方法,当一个类中有main()方法,执行命令“java 类名”则会启动虚拟机执行该类中的main方法。在一个java类的main方法中调用另一个类的main方法会不会导致另一个虚拟机的开启啊?
作者: 偏執旳、靑春    时间: 2013-2-24 17:05
1.程序运行都有一个先后顺序,这个根据代码来走的
2.他会在你编译的程序中找到第一个main()方法,这就是程序的入口,JVM自动来找,是虚拟机先启动来找程序入口,不是main()函数叫JVM启动
3.一旦虚拟机启动,遇到下一个main()函数只会当做一般类来处理了,不会说再去启动一个JVM机,因为这是一个完整的程序,不是两个不同的进程。
作者: 胥文    时间: 2013-2-24 17:07
个人理解:在一个类的主函数调用另一个类的主函数的时候,你可以把另一个类的主函数当做静态方法来看
当类被加载的时候,jvm启动,找到程序的入口(主函数),虚拟机就一直在这个主函数中调用其他类的方法(调用的方法不管是主函数,还是一般的方法,在这个类中主函数就只有一个),直到调用完为止,在调用期间
jvm一直就是开着,不需要在调用;
作者: 邢义敏    时间: 2013-2-24 17:22
main方法,被JAVA虚拟机调用就是入口函数,生成一个主线程。被别的方法调用,那就只是一个普通的静态方法,就是说不生成新线程,而只是调用它的线程的一部分而已(main方法内具体什么功能,生成不生成新线程那是另外一回事)。  然后再说一下进程的事,main方法即便被当成入口函数被JAVA虚拟机调用,它也不会生成什么进程,或者说main方法跟进程就没有关系。把这个搞混的只能说是把进程的概念搞混了,进程是操作系统层面上的概念,而在这里,即一个JAVA程序跟进程对应的是JAVA虚拟机生成的实例,就是java这个命令对应的程序,而虚拟机调用main方法之类的动作站在进程高度上看,只是一个进程的具体功能而已。举个极端的例子,你执行java这个命令,不带任何参数,会报错。但实际上一个进程已经被创建。报错本身是这个进程的执行结果,就是说,进程本身正常的被执行了。

所以不应该通过用直接调用别的类中的main()方法打开那个程序,而是应该通过Runtime.exec()方法:
  Runtime runtime = Runtime.getRuntime();
  runtime.exec("C:\\Program Files\\Baidu\\BaiduPlayer\\1.17.0.172\\BaiduPlayer\\1.19.0.57\\BaiduPlayer.exe");

而对于jar文件,又要这样才行:
  runtime.exec("cmd /c start java -jar F:\\MyShift.jar");
  runtime.exec("cmd /c start javaw -jar F:\\MyShift.jar");
作者: 王宝生    时间: 2013-2-24 20:30
这个并不是按照、main的数量来衡量的。如果你这个main方法里又创建了一个新的进程,那么也会在启动一个java虚拟机的
作者: 张宁    时间: 2013-2-25 20:08
这个跟虚拟机没关系
凡是static void main(string[] args)的方法,都是被识别的启动程序的入口





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