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的,就無法訪問到,因此報錯。