到目前为止,我一直在使用public void run() {}
方法在Java中执行我的代码.何时/为什么可能想要使用main()
或init()
代替run()
?
这是一个特殊的问题,因为它不应该是一个选择问题.
启动JVM时,指定要运行的类,它是main()
程序启动时所在的类.
通过init()
,我想你指的是JApplet的方法.在浏览器中启动applet init()
时,指定applet 的方法将作为第一个业务顺序执行.
通过run()
,我假设你的意思是Runnable的方法.这是启动新线程时调用的方法.
主要:程序启动
init:applet start
run:thread start
如果Eclipse正在运行你的run()
方法,即使你没有main()
,那么它正在做一些特殊的和非标准的,但不是不可行的.也许您应该发布一个以这种方式运行的示例类.
该main
方法是Java应用程序的入口点.
具体来说,当Java虚拟机通过指定其类(通过使用java
应用程序启动器)被告知运行应用程序时,它将查找main
具有签名的方法public static void main(String[])
.
从Sun的java
命令页面:
在Java的工具启动Java应用程序.它通过启动Java运行时环境,加载指定的类以及调用该类的main方法来实现此目的.
该方法必须声明为public和static,它不能返回任何值,并且必须接受
String
数组作为参数.方法声明必须如下所示:public static void main(String args[])
有关如何执行Java应用程序的其他资源,请参阅以下来源:
第12章:从Java语言规范执行,第三版.
第5章:从Java虚拟机规范,第二版链接,加载,初始化.
仔细看看在"Hello World"的应用从Java教程.
该run
方法是Thread
实现Runnable
接口的new 或类的入口点.Java Virutal Machine在java
命令启动时不会调用它.
作为一个Thread
或Runnable
本身不能直接由Java虚拟机上运行,所以它必须通过调用Thread.start()
方法.这可以通过在应用程序的方法中实例化Thread
并调用其start
方法来实现main
:
public class MyRunnable implements Runnable { public void run() { System.out.println("Hello World!"); } public static void main(String[] args) { new Thread(new MyRunnable()).start(); } }
有关更多信息以及如何启动子类Thread
或实现类的示例Runnable
,请参阅从Java教程定义和启动线程.
该init
方法是在Applet或JApplet中调用的第一个方法.
当applet由浏览器的Java插件或applet viewer加载时,它将首先调用该Applet.init
方法.应该在此处执行使用applet所需的任何初始化.在之后init
的方法完成,start
方法被调用.
有关何时init
调用applet方法的更多信息,请阅读Java教程中Applet生命周期中 applet的生命周期.
另请参阅:如何从Java教程制作Applet.