异常如下:Exception in thread "main" java.lang.NullPointerException
        at B.add(Test.java:27)
        at Test.main(Test.java:57)
代码如下:接口U只有3个方法
abstract class CU implements U
{}
class A
{
CU createU(){
return new CU(){
public void ua(){
System.out.println("a");
}
public void ub(){
System.out.println("b");
}
public void uc(){
System.out.println("c");
}
};
}
}class B
{
static int id=0;
int i=0;
U []uArray; void add( U u ){
uArray[id]=u;
id++;
}
void cls(int n){
if(n==1){
for(i=0;i<uArray.length-1;i++)
uArray[i]=uArray[i+1];
}
else if(n>1&&n<=uArray.length){
if(n!=uArray.length)
for(i=n-1;i<uArray.length-1;i++)
uArray[i]=uArray[i+1];
}
id--;
}
void show(){
for(int i=0;i<uArray.length;i++){
System.out.println(uArray[i]);
}
}
}
class Test
{
public static void main(String args[]){
int i=0;
B b=new B();
A a[]=new A[5]; for(i=0;i<5;i++){
a[i]=new A();
b.add(a[i].createU());
}
b.show();
b.cls(3);
}
}

解决方案 »

  1.   

    有点乱啊。这是要实现什么?下面代码解决了异常:
    interface U{
    public void ua();
    public void ub();
    public void uc();
    }abstract class CU implements U {
    }class A {
    CU createU() {
    return new CU() {
    public void ua() {
    System.out.println("a");
    } public void ub() {
    System.out.println("b");
    } public void uc() {
    System.out.println("c");
    }
    };
    }
    }class B {
    static int id = 0; int i = 0; U[] uArray;

    public B(int j){
    uArray = new U[j];
    }
    void add(U u) {
    uArray[id] = u;
    id++;
    } void cls(int n) {
    if (n == 1) {
    for (i = 0; i < uArray.length - 1; i++)
    uArray[i] = uArray[i + 1];
    } else if (n > 1 && n <= uArray.length) {
    if (n != uArray.length)
    for (i = n - 1; i < uArray.length - 1; i++)
    uArray[i] = uArray[i + 1];
    }
    id--;
    } void show() {
    for (int i = 0; i < uArray.length; i++) {
    System.out.println(uArray[i]);
    }
    }
    }class Test {
    public static void main(String args[]) {
    int i = 0;
    B b = new B(5);
    A a[] = new A[5]; for (i = 0; i < 5; i++) {
    a[i] = new A();
    b.add(a[i].createU());
    }
    b.show();
    b.cls(3);
    }
    }
      

  2.   

    这是个匿名类练习题,要求B类中有个U接口引用数组,A能产生匿名类对象,将该对象赋值给接口引用
      

  3.   

    U []uArray ;没有指定数组的长度,也就是没有初始化,此时它是一个成员变量,默认初始化为null,
    而你却用到了uArray[id]=u;所以就会有空指针异常啦!
      

  4.   

    兄弟,有点问题啊,你的类B里面声明了U[] uArray;但是我从来没有看到你对它进行NEW啊,也就是说你的U一直空着啊,你空着的时候又拿U来使用,你说这样会不会报空指针错误呢?你试一下加入B的构造方法B(int i)
    {
    uArray = new U[i];
    }你给A产生多少个的时候也给B产生多少个。