Java 内部类和两个构造函数
我是java新手。我在互联网上的某个地方发现了这段代码Java 内部类和两个构造函数,java,Java,我是java新手。我在互联网上的某个地方发现了这段代码 class FactoryOuter { FactoryInner[] fi = new FactoryInner[3]; private int lastIndex = 0; private int x = 0; public FactoryOuter(int x) { this.x = x; } public int getX() { return x; } publi
class FactoryOuter {
FactoryInner[] fi = new FactoryInner[3];
private int lastIndex = 0;
private int x = 0;
public FactoryOuter(int x)
{
this.x = x;
}
public int getX()
{
return x;
}
public void addInner(int y)
{
if (lastIndex < fi.length)
{
fi[lastIndex++] = new FactoryInner(y);
}
else throw new RuntimeException("FactoryInner array full");
}
public void list()
{
for (int i = 0; i < fi.length; i++)
{
System.out.print("I can see into the inner class where y = " +
fi[i].y + " or call display: ");
fi[i].display();
}
}
public class FactoryInner
{
private int y;
private FactoryInner(int y)
{
this.y = y;
}
public void display()
{
System.out.println("FactoryInner x = " + x + " and y = " + y);
}
}
}
public class FactoryInnerOuter
{
public static void main(String[] args)
{
FactoryOuter fo = new FactoryOuter(1);
fo.addInner(101);
fo.addInner(102);
fo.addInner(103);
fo.list();
//fo.addInner(104);
}
}
我的问题如下
1) 我看到FactoryInner
类的构造函数被调用了两次。第一个实例显然调用了一个默认构造函数,如下所示
FactoryInner[] fi = new FactoryInner[3];
第二个实例调用代码中定义的构造函数
fi[lastIndex++] = new FactoryInner(y);
为什么代码需要两个构造函数?如果我替换
FactoryInner[] fi = new FactoryInner[3]; with
FactoryInner[] fi;
我确实得到了以下错误
Exception in thread "main" java.lang.NullPointerException
at FactoryOuter.addInner(FactoryInnerOuter.java:19)
at FactoryInnerOuter.main(FactoryInnerOuter.java:56)
为什么需要两个承包商?这是一个特别糟糕的例子吗?有人能解释一下吗。这个
fi[lastIndex++] = new FactoryInner(y);
在factorynner
数组fi
中的索引lastIndex
处初始化factorynner
引用
这个
初始化fi
FactoryInner
数组。请注意方括号,[]
必须先初始化数组,然后才能初始化其元素。否则,您将尝试访问null
数组引用的成员,并获取NullPointerException
此
fi[lastIndex++] = new FactoryInner(y);
在factorynner
数组fi
中的索引lastIndex
处初始化factorynner
引用
这个
初始化fi
FactoryInner
数组。请注意方括号,[]
必须先初始化数组,然后才能初始化其元素。否则,您将尝试访问
null
数组引用的成员并获取NullPointerException
第一个不是对构造函数的调用。
在这里,您正在初始化FactoryInner对象数组,其中包含三个对象:
FactoryInner[] fi = new FactoryInner[3];
在这里,您将实际的factoryanner对象放入数组中,因此需要为构造函数提供一个值,因为现在您实际上正在初始化factoryanner类中的对象:
fi[lastIndex++] = new FactoryInner(y);
第一个不是对构造函数的调用。 在这里,您正在初始化FactoryInner对象数组,其中包含三个对象:
FactoryInner[] fi = new FactoryInner[3];
在这里,您将实际的factoryanner对象放入数组中,因此需要为构造函数提供一个值,因为现在您实际上正在初始化factoryanner类中的对象:
fi[lastIndex++] = new FactoryInner(y);
可以安全地说,在java类型[]中,obj=新类型[N];所有数组的偏差是否都应该存在?@liv2hak还有另一种初始化数组的方法,使用
{…}
表示法。看一看,在java类型[]中,obj=new-Type[N];所有数组的偏差是否都应该存在?@liv2hak还有另一种初始化数组的方法,使用{…}
表示法。看一看