J2ME中主类的构造方法必须用public修饰
今天在写程序时遇到一个小问题:一个j2me的小程序编译时没错,运行时提示java.lang.IllegalAccessException,我的程序代码如下:
import javax.microedition.lcdui. * ;
import javax.microedition.midlet.MIDlet;
public class Test extends MIDlet implements CommandListener
{
private Display display;
private Form mainForm;
private Command okCommand;
public Test()
{
mainForm = new Form( " Test " );
okCommand = new Command( " Yes " ,Command.OK, 0 );
mainForm.addCommand(okCommand);
mainForm.setCommandListener( this );
}
protected void startApp()
{
display = Display.getDisplay( this );
display.setCurrent(mainForm);
}
protected void destroyApp( boolean unconditional)
{}
protected void pauseApp() {}
public void commandAction(Command c, Displayable d)
{
System.out.println( " hello " );
}
}
我在百度里搜索之后,知道是主类Test的构造方法Test()前应该加上public,我加上之后果然就对了,可是为什么要加public呢?我记得以前写J2SE的程序时有时也没加public呀,比如这个例子:
public class A
{
A(){}
public static void main(String[] args){
System.out.println( " hello world " );
}
}
这个例子可以正常运行,后来在csdn网友的提示下才明白:原来J2ME中的startApp()方法和J2SE中的main()方法类似,都是程序的入口,但是在J2SE中,main()方法是“public static”的,也就是说是公共静态方法,这样就可以通过类名直接访问,而无需实例化;但是在J2ME中,startApp()却并不是static方法,需要先得到一个主类的实例,才能访问startApp(),这时候就需要调用构造方法,如果构造方法不是public的,就无法访问到,因此报错。