J2ME中主类的构造方法必须用public修饰

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的,就无法访问到,因此报错。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章