空指针异常出现在对引用类型的操作上,当引用变量指向为空仍然去操作它的方法和属性时。
1、当在栈区声明了引用类型的变量,而未让该引用变量指向堆区的内存时(即只声明未初始化),再操作该引用变量则出空指针错。如下例:
Map<String,Image> m; //因m没有初始化(m = new HashMap<String,Image>()),所以m仍是空指针。
m.get("one");
2、既声明又初始化了引用变量,但操作该引用变量的语句的作用域 不在 声明该引用变量的语句的作用域内。如下例:
Character me;
GameFrame(String s)
{
super(s);
if(null != background)
this.setBounds(0,0,background.getWidth(null),background.getHeight(null)+20);
this.setVisible(true);
Character me = new Character(true,0,0);
}
public void paint(Graphics g) {
// TODO Auto-generated method stub
//super.paint(g);
g.drawImage( background, 0, 0, null );
me.draw(g); //由于初始化的引用变量me是局部变量,所以成员变量me仍然为空引用。